Qt程序移植
目錄
- 一、前言
- 二、Windows Qt程序移植
- 三、Linux Qt程序移植
- 附:其他相關(guān)文章
一、前言
??我們使用Qt軟件構(gòu)建項(xiàng)目之后得到exe執(zhí)行文件,但是exe文件正常執(zhí)行需要依賴Qt的各種動(dòng)態(tài)庫(kù),所以如果想要在電腦上直接雙擊運(yùn)行exe文件,就需要配置系統(tǒng)的環(huán)境變量,將Qt的動(dòng)態(tài)庫(kù)路徑添加到系統(tǒng)的環(huán)境變量中,才能保證程序正常運(yùn)行。
??通常情況下,我們都需要把程序安裝到其他的電腦或設(shè)備上運(yùn)行,而我們需要安裝應(yīng)用程序的電腦不一定已經(jīng)安裝Qt軟件并且配置好系統(tǒng)環(huán)境變量,另外如果我們的程序運(yùn)行需要依賴安裝Qt軟件的話肯定是不合理的。所以,為了能夠讓程序在其他的電腦上正常運(yùn)行,此時(shí)就需要對(duì)程序進(jìn)行打包,然后移植到目標(biāo)電腦或設(shè)備上運(yùn)行即可。
二、Windows Qt程序移植
1、首先在Qt的安裝安裝目錄下找到項(xiàng)目構(gòu)建套件的目錄(如mingw73_32),進(jìn)入該目錄,創(chuàng)建一個(gè)自定義的目錄,然后把Qt項(xiàng)目構(gòu)建生成的exe文件拷貝到新建的目錄中。
2、打開Qt的命令行操作終端,然后進(jìn)入我們新建的目錄,在命令行中輸入windeployqt test.exe(程序名字根據(jù)實(shí)際而定),然后回車執(zhí)行,等待命令執(zhí)行完畢。
3、 打包完成,在剛才新建的目錄里面多了很多文件,這些文件都是exe運(yùn)行必要的庫(kù)文件,此時(shí)我們就可以把當(dāng)前的整個(gè)目錄拷貝移植到其他電腦上面運(yùn)行了。
注意:
- 上述的操作只能添加Qt自帶的dll文件,如果我們的項(xiàng)目中使用了第三方的庫(kù)文件,就必須要手動(dòng)把對(duì)應(yīng)dll文件拷貝到這個(gè)程序目錄中。比如,項(xiàng)目中使用了FFMpeg數(shù)據(jù)庫(kù),那就需要手動(dòng)添加FFMpeg相關(guān)的dll和lib文件。
- exe程序打包的目錄和命令行終端執(zhí)行打包命令的路徑需要根據(jù)項(xiàng)目構(gòu)建的使用的套件而定(如mingw73_32),因?yàn)椴煌臉?gòu)建套件使用的庫(kù)文件不一樣,所以exe文件必須要放到對(duì)應(yīng)構(gòu)建套件的目錄下打包才可以。
三、Linux Qt程序移植
??Linux下Qt項(xiàng)目構(gòu)建生成的執(zhí)行文件同樣需要打包所需的庫(kù)文件才能移植到其他設(shè)備上運(yùn)行,僅限于使用Qt動(dòng)態(tài)構(gòu)建套件才需要打包庫(kù)文件進(jìn)行移植。如果自己通過Qt源碼編譯設(shè)置了靜態(tài)構(gòu)建套件的話,則不需要進(jìn)行庫(kù)文件打包移植,因?yàn)殪o態(tài)構(gòu)建已經(jīng)把程序所需的庫(kù)文件編譯到執(zhí)行文件了,只把執(zhí)行文件移植到其他設(shè)備上就可以正常運(yùn)行。
??Linux下Qt程序打包的步驟如下:
1、使用Qt編譯完之后得到可執(zhí)行文件如demo
2、新建打包文件夾如demoPack,把demo拷貝到該文件夾下
3、新建一個(gè)腳本文件pack.sh,作用是提取lib文件
4、新建一個(gè)腳本文件demo.sh
5、在終端輸入./pack.sh運(yùn)行腳本,執(zhí)行成功之后會(huì)得到依賴的lib文件
6、測(cè)試是否可以執(zhí)行,在終端輸入./demo.sh運(yùn)行腳本
7、移植到未安裝Qt環(huán)境的設(shè)備運(yùn)行,測(cè)試是否可用
??腳本文件pack.sh的內(nèi)容如下:
#!/bin/sh# program name exe="demo" # package directory path, must create it in advance des="/home/demoPack"deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }') cp $deplist $des??腳本文件demo.sh的內(nèi)容如下:
#!/bin/shappname=`basename $0 | sed s,\.sh$,,` dirname=`dirname $0` tmp="${dirname#?}" if [ "${dirname%$tmp}" != "/" ]; thendirname=$PWD/$dirname fi LD_LIBRARY_PATH=$dirname export LD_LIBRARY_PATH $dirname/$appname "$@"附:其他相關(guān)文章
Windows Qt設(shè)置環(huán)境變量
總結(jié)
- 上一篇: 浅谈平衡树
- 下一篇: UML类图最生动的介绍和例子