當前位置:首頁 » 編程軟體 » qt交叉編譯動態庫

qt交叉編譯動態庫

發布時間: 2023-02-16 12:26:53

『壹』 Qt的交叉編譯問題

修改QtCreator的配置。
tools-->Options--->Build && Run --->Qt Versions
把你的開發板的編譯工具鏈扔進去。再到你發的那個圖里設置。

『貳』 Qt交叉編譯遇到的問題

QT相關的安裝軟體包:

(1) tmake-1.13.tar.gz (編譯工具,如progen與tmake)

(2) qt-embedded-2.3.7.tar.gz (提供了qte的庫)

(3) qt-x11-2.3.2.tar.gz (為了生成相應的QT工具,如designer和qvfb等)

(4) qtopia-free-1.7.0.tar.gz (QTE的桌面環境程序)

(5) cross-3.3.2.tar.bz2 (交叉編譯工具)

一、安裝工具

1 安裝 tmake

linux 命令模式下運行以下命令:

tar xfz tmake-1.11.tar.gz

export TMAKEDIR=$PWD/tmake-1.11

export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++

export PATH=$TMAKEDIR/bin:$PATH

2 安裝 Qt/Embedded 2.3.7

在 Linux 命令模式下運行以下命令:

tar xfz qt-embedded-2.3.7.tar.gz

cd qt-2.3.7

export QTDIR=$PWD

export QTEDIR=$QTDIR

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

./configure –qconfig local–qvfb -depths 4,8,16,32

make sub-src

cd ..

上述命令 ./configure -qconfig -qvfb -depths 4,8,16,32 指定 Qt 嵌入式開發包生成虛擬緩沖幀工具qvfb,並支持 4,8,16,32 位的顯示顏色深度。另外我們也可以在 configure 的參數中添加-system-jpeg 和 gif,使 Qt/Embedded 平台能支持 jpeg、gif 格式的圖形。

上述命令 make sub-src 指定按精簡方式編譯開發包,也就是說有些 Qt 類未被編譯。Qt 嵌入式開發包有 5種編譯范圍的選項,使用這些選項,可控制 Qt 生成的庫文件的大小,但是您的應用所使用到的一些 Qt 類將可能因此在 Qt 的庫中找不到鏈接。編譯選項的具體用法可運行./configure -help 命令查看。

在這一過程的configure中出現了問題:有一個變數沒有聲明,發現是少了一個頭文件,加上即可,make順利通過,看到了enjoy!

3 安裝 Qt/X11 2.3.2

在 Linux 命令模式下運行以下命令:

tar xfz qt-x11-2.3.2.tar.gz

cd qt-2.3.2

export QTDIR=$PWD

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

./configure -no-opengl

make

make -C tools/qvfb

mv tools/qvfb/qvfb bin

cp bin/uic $QTEDIR/bin

cd ..

根據開發者本身的開發環境,也可以在 configure 的參數中添加別的參數, 比如-no-opengl 或-no-xfs,可以鍵入./configure -help 來獲得一些幫助信息。

在這個安裝過程中也出現了很多錯誤,典型的就是在make過程中:

/usr/local/qt-2.3.2/include/qvaluestack.h:57: error: cannot convert 'QValueListIterator<QMap<QString, QString> >' to 'const char*' for argument '1' to 'int remove(const char*)'

/usr/local/qt-2.3.2/include/qvaluestack.h: In member function 'T QValueStack<T>::pop() [with T = QString]':

xml/qxml.cpp:2502: instantiated from here

/usr/local/qt-2.3.2/include/qvaluestack.h:57: error: cannot convert 'QValueListIterator<QString>' to 'const char*' for argument '1' to 'int remove(const char*)'

make[2]: *** [xml/qxml.o] Error 1

make[2]: Leaving directory `/usr/local/qt-2.3.2/src'

make[1]: *** [sub-src] Error 2

make[1]: Leaving directory `/usr/local/qt-2.3.2'

make: *** [init] Error 2

這個錯誤是說,在文件qvaluestack.h的57行出錯。改正方法是修改文件qt-2.3.2/ include/qvaluestack.h的 第57行,將remove( this->fromLast() );改為 this->remove( this->fromLast() );

修改時可能要更改文件許可權,變成可寫的,chmod 666 qvaluestack.h。然後make順利通過,看到了enjoy。

二、交叉編譯 Qt/Embedded 的庫

開發居於 Qt/Embedded 的應用程序要使用到 Qt/Embedded 的庫,編寫的 Qt 嵌入式應用程序最終是在YLE270開發板上運行的,因此在把 Qt 嵌入式應用程序編譯成支持 YLE270 的目標代碼之前,需要兩樣東西,一個是 arm9 的 linux 編譯器,另一個是經 arm9 的linux 編譯器編譯過的 Qt/Embedded 的庫。安裝交叉編譯工具 cross-3.3.2 前面已經安裝過了。

這一步主要是配置 Qt/Embedded2.3.7 的安裝,Qt/Embedded 的安裝選項有很多個,您可以在命令行下直接輸入「./configure」來運行配置,這時安裝程序會一步一步提示你輸入安裝選項。您也可以在「./configure」後輸入多個安裝選項直接完成安裝的配置。在這些選項中有一個選項決定了編譯 Qt/Embedded 庫的范圍,即可以指定以最小,小,中,大,完全 5 種方式編譯 Qt/Embedded 庫。另外 Qt/Embedded 的安裝選項還允許我們自己定製一個配置文件,來有選擇的編譯 Qt/Embedded 庫,這個安裝選項是「-qconfig local」 ;當我們指定這個選項時,Qt/Embedded庫在安裝過程中會尋找qt-2.3.7/src/tools/qconfig-local.h 這個文件,如找到這個文件,就會以該文件裡面定義的宏,來編譯鏈接 Qt/Embedded 庫。

具體過程如下:

cd qt-2.3.7

export QTDIR=$PWD

export QTEDIR=$QTDIR

make clean

./configure –xplatform linux-arm-g++ -shared –debug (接下行)

-qconfig local -qvfb -depths 4,8,16,32

make

cd ..

在make中出現了錯誤,有變數沒有聲明,原來是優龍公司為了避免初學者在一開始就直接接觸到 Qt/Embedde 的復雜的宏編譯選項,把這些宏定義到一個名為 qconfig-local.h的安裝配置文件中,在安裝 Qt/Embedded 的時候,需要把這個文件復制到 Qt/Embedded 的安裝路徑的/src/tools 子路徑下,

cp /配置文件所在路徑/qconfig-local.h ./src/tools

make順利通過,看到了enjoy。

最後就可以在命令行下輸入make 命令對整個工程進行編譯鏈接了,在這里,要把過程中產生的文件放在同一個文件夾裡面,方便應用。

在最後make完畢以後我還是遇到了一個問題,就是生成的可執行文件不能運行,運行時提示:./hello cannot execute binary file,當然不能直接在自己的主機上運行了,因為生成的二進制文件要下到板子上運行的。接上液晶屏,板子上電,把生成的可執行文件下載到板子上,要chmod一下,不然許可權不夠,終於在液晶屏上看到了自己弄的小程序,好開心!

三、添加一個 Qt/Embedded 應用到 QPE

以hello,world!為例

1 在工作的機器上解包 qtopia

tar zxvf qtopia-free-1.7.x.tar.gz

cd qtopia-free-1.7.x

export QTDIR=$QTEDIR

export QPEDIR=$PWD

export PATH=$QPEDIR/bin:$PATH

注意在上面已經設定環境變數 QPEDIR 為 QPE 的安裝(解包)路徑。

2 建立 Hello,World 的例子程序的圖標文件

方法是:製作一個 32 X 32 大小的 PNG 格式的圖標文件,將該文件存放在$QPEDIR/pics/inline 目錄下,然後使用以下命令將$QPEDIR/pics/inline 目錄下的所有圖形文件轉換成為一個 c 語言的頭文件,這個頭文件包含了該目錄下的圖形文件的 rgb 信息。

qembed --images $QPEDIR/pics/inline/*.*

> $QPEDIR/src/libraries/qtopia/inlinepics_p.h

3 交叉編譯 qtopia

在$QPEDIR 路徑下,運行以下命令

cd src

./configure –platform linux-arm-g++

make

cd ..

在這一過程中也出現了比較大的錯誤,在make的時候又出現了error,是resource.cpp的174行的變數qembed_findImage沒有聲明,考慮到以前遇到的情況,推斷可能是少了某個頭文件,但是又不知道是哪一個,google了很久都沒有找到解決辦法,沒辦法只好點開src/libraries/qtopia下面的每一個頭文件看了一遍,還是沒有發現有含有這個變數的文件,繼續google,然後發現了inlinepics_p.h中包含qembed_findImage,於是vi /usr/local/qtopia-free-1.7.0/src/libraries/qtopia/inlinepics_p.h,發現inlinepics_p.h是空白的,原來是

qembed --images $QPEDIR/pics/inline/*.*

> $QPEDIR/src/libraries/qtopia/inlinepics_p.h

出了錯誤,重新操作一遍這一步,再查看inlinepics_p.h,發現正常了,要繼續交叉編譯qtopia:

make clean

./configure –platform linux-arm-g++

『叄』 QT交叉編譯環境

將安裝全套的Qt開發環境,可以在PC端進行qt開發。

Ubuntu14.04的Qt版本為5.2.1,16.04的Qt版本為5.5.1,高版本Qt庫可以向下兼容運行低版本工具鏈編譯的程序,因此這里選用5.2.1版本作為編譯工具鏈。

進入Qt工程目錄中,目錄下會有個<工程名>.pro文件,如果目錄中存在<工程名>.pro.user文件,是之前qtcreator生成的配置文件,請先刪除。然後運行:

即可完成編譯,編譯好的程序可以放到樹莓派上直接運行。

另外,工程的配置可以通過修改 工程名.pro文件,例如添加鏈接庫,只需要在文件中添加如下選項:

添加c99支持:QMAKE_CFLAGS += -std=c99

『肆』 linux c: Qt4.7.0交叉編譯後移植(tiny 6410)

請您試一下這個命令,查看您的widget調用什麼庫了。
$arm-none-linux-gnueabi-objmp ./widget | greep NEEDED

是不是libc庫您沒放到開發板/lib里?

『伍』 如何進行Qt應用程序的交叉編譯

首先得把我們在X86機上調好的程序進行交叉編譯,如果在X86上都沒有通過的話。。那就不用交叉編譯了,(肯定是通不過的),還是到正題吧,設置好環境變數,我們用以用echo 來查看環境變數,echo $TMAKEPATH ,如果返回的不是.../qws/linux-arm-g++ 的字元的話,我們一定得從新設置,

export TMAKEPATH=/tmake 的安裝路徑/qws/linux-arm-g++ ,同時QTDIR一定得要指定QTE的安裝路徑,設置過程如下:

export QTDIR=...../qt-2.3.7

以上環境設置好後,我們可以使用tmake來生成Makefile,注意這里我們是用tmake,而不是用qmake(注意),tmake工具在tmake包裡面。 具體做法,我們可以在命令行下打:

tmake -o Makefile 工程名.pro

這樣我們就新生成了一個Makefile文件,下一步,我們要打開這個文件,做一些小的修改

1: 將LINK=arm-linux-gcc 改為:LINK=arm-linux-g++

2:將LIBS=$(SUBLIBS) -L$(QTDIR)/lib -lm -lqte這句話改為:

LIBS=$(SUBLIBS) -L/opt/gcc-2.3.2-glibc-3.3.2/lib -L$(QTDIR)/lib -lm -lqte

加上你的交叉編譯的庫。

最後我們可以make了,一個可以在您的板子上可以運行的二進制文件產生了。linux

『陸』 為什麼動態編譯Qt庫需要Perl環境

您最初的想法是正確的,x86平台的庫放在電腦上即可。

而通過arm-linux-交叉編譯工具鏈編譯過的庫,是需要放在
開發板的文件系統裡面的,通用的做法一般是放在/lib或者/usr/lib
目錄裡面即可。或者也可放在其他目錄中,但是需要配置一下LD_LIBRARY_PATH
環境變數。例如放在/home/qtlib目錄中,由於這個不是系統默認的動態庫目錄,

需要設置環境變數LD_LIBRARY_PATH,在/etc/profile下面添加:
export LD_LIBRARY_PATH=/home/qtlib:$LD_LIBRARY_PATH

『柒』 Qt下如何編譯庫

一般分為動態庫和靜態庫,方法分別如下:
一.
靜態庫的生成
1.
測試目錄:
lib
2.
源碼文件名:
mywindow.h,
mywindow.cpp
3.
編寫項目文件:
mywindow.pro
注意兩點:
TEMPLATE
=
lib
CONFIG
+=
staticlib
4.
生成Makefile:
qmake
mywindow.pro
5.
編譯生成靜態庫libmywindow.a
make
二.
靜態庫的使用
1.
測試目錄:
test
2.
將mywindow.h與libmywindow.a拷貝至test目錄下
3.
編寫main.cpp,
包含頭文件mywindow.h,
並調用MyWindow類
4.
編寫項目文件:
test.pro
注意加上庫路徑與庫文件名:
LIBS
+=
-L
./
-lmywindow
5.
生成Makefile:
qmake
test.pro
6.
編譯:
make
7.
運行:
./test
三.
動態庫的生成
動態庫編譯基本和靜態庫類似,需要將上述將要進行編譯的項目文件.pro中下面這行去掉
CONFIG
+=
staticlib
按上述操作編譯完後就可以得到以lib開頭並且.so*
結尾動態庫文件,一般有多個。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:748
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1012
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:718
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:878
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:774
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1127
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:351
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:229
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:911
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:875