qt编译如何保证库顺序
㈠ 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*
结尾动态库文件,一般有多个。
㈡ Qt 澶氶”鐩绠$悊
棣栧厛鏄鍏堟柊寤轰竴涓瀛愮洰褰曢”鐩锛屽啀镙规嵁闇瑕佸湪瀛愮洰褰曢”鐩涓娣诲姞涓涓搴旂敤绋嫔簭椤圭洰浠ュ强澶氢釜搴撶殑椤圭洰锛屽瓙鐩褰曢”鐩榛樿ゅ氨鍙链変竴涓.pro鏂囦欢銆
浠庘#钬濆紑濮嬶纴鍒拌繖涓琛岀粨𨱒熴
妯℃澘鍙橀噺锻婅瘔qmake涓鸿繖涓搴旂敤绋嫔簭鐢熸垚鍝绉峬akefile銆
鎸囧畾缂栬疟鍣ㄩ夐”鍜岄”鐩閰岖疆锛屽肩敱qmake鍐呴儴璇嗗埆骞跺叿链夌壒娈婃剰涔夈
浠ヤ笅閰岖疆鍊兼带鍒剁紪璇戞爣蹇楋细
qmake娣诲姞杩欎釜鍙橀噺镄勫间綔涓虹紪璇戝櫒C棰勫勭悊鍣ㄥ畯(-D阃夐”)銆
鎸囧畾缂栬疟椤圭洰镞跺簲璇ヨ鎼灭储镄#include鐩褰曘
鎸囧畾绋嫔簭缂栬疟镞朵緷璧栫殑鐩稿叧璺寰勚
鎸囧畾鍦ㄤ綍澶勬斁缃鐩镙囨枃浠躲
鎸囧畾鐩镙囨枃浠剁殑钖岖О銆傞粯璁ゆ儏鍐典笅鍖呭惈镄勯”鐩鏂囦欢镄勫熀链钖岖О銆
鎸囧畾鏋勫缓鐩褰曘
鎸囧畾𨱒ヨ嚜moc镄勬墍链変腑闂存枃浠舵斁缃镄勭洰褰曪纸钖玅_OBJECT瀹忕殑澶存枃浠惰浆鎹㈡垚镙囧嗳.h鏂囦欢镄勫瓨鏀剧洰褰曪级銆
鎸囧畾镓链変腑闂存枃浠.o锛.obj锛夋斁缃镄勭洰褰曘
鎸囧畾Qt璧勬簮缂栬疟鍣ㄨ緭鍑烘枃浠剁殑鐩褰曪纸.qrc鏂囦欢杞鎹㈡垚qrc_*.h鏂囦欢镄勫瓨鏀剧洰褰曪级銆
鎸囧畾阈炬帴鍒伴”鐩涓镄勫簱鍒楄〃銆-L钖庢槸搴撴枃浠剁殑鐩褰曪纴-l钖庢槸鍏蜂綋镄勫簱镄勫悕瀛(钖庣紑涓岖敤锷)銆备緥濡傦细
LIBS += -L$$PWD/../../../ThirdLib/winapi -lWSock32
浠呴傜敤浜嶹indows锛屾寚瀹氱殑锲炬爣搴旇ュ寘钖鍦ㄤ竴涓鐢熸垚镄.rc鏂囦欢閲屻傚傛灉RC_FILE 鍜孯ES_FILE鍙橀噺閮芥病链夎剧疆杩欐墠鍙鍒╃敤銆
鎸囧畾鍖呭惈鐢ㄦ埛鐣岄溃缈昏疟鏂囨湰镄勭炕璇(.ts)鏂囦欢鍒楄〃銆
涓篧indows骞冲彴锷犵殑渚濊禆骞冲彴镄勬枃浠剁殑绠鍗旷殑浣灭敤锘熺湅璧锋潵灏卞儚杩欐牱锛
win32 { SOURCES += hello_win.cpp }
姣忔℃坊锷犱竴涓瀛愰”鐩灏变细鍦⊿UBDIRS椤圭洰锷犱笂涓涓椤圭洰钖嶏纴瀛愮洰褰曢”鐩镄 TEMPLATE = subdirs 銆 CONFIG += ordered 鏄璁╅”鐩鎸夌収椤哄簭缂栬疟锛岀敱浜庝富绋嫔簭渚濊禆浜庡瑰簲镄勫簱锛屼竴鑸閮芥槸鎶奙ainApp鏀惧湪SUBDIRS镄勬渶钖庛
瀵逛簬涓浜涘簱鍜屼富绋嫔簭閮介渶瑕佺殑鐩褰曡剧疆 (鏋勫缓鐩褰曘乷bj鐢熸垚鐩褰曘乵oc鏂囦欢鐢熸垚鐩褰旷瓑)锛屽彲浠ョ粺涓鍐椤湪涓涓猵ri鏂囦欢涓锛
鍦ㄩ渶瑕佸紩鐢ㄧ殑pro鏂囦欢涓锛
include($$PWD/../../../Path.pri)
message($$INCLUDEPATH) , 浼氩湪姒傝佷俊鎭涓镓揿嵃鐩稿叧鍙橀噺镄勫
涓荤▼搴忕殑 TEMPLATE = app 銆傞櫎浜嗗父瑙勭殑pro璁剧疆澶栵纴瑕佽板缑灏呜嚜宸辩紪镄勫簱镄勫ご鏂囦欢鐩褰曞姞涓婏纴骞跺皢鐢熸垚镄刣ll阃氲繃LIBS阈炬帴锛
搴撶殑 TEMPLATE = lib 銆傚簱鍦ㄩ氲繃Creator鏂板缓镄勬椂鍊欎细鐢熸垚涓涓獂xx_global.h锛屽畾涔変简瀵煎嚭搴撶殑鐩稿叧淇℃伅锛
鍦ㄥ簱涓瑕佷綔涓烘帴鍙g殑绫昏板缑锷犱笂瀵瑰簲镄勫畯锛
class TESTLIBSHARED_EXPORT TestLib : public QObject
闱欐佸簱璨屼技涓嶉渶瑕佽繖涓锛屽緟娴嬭瘯...
㈢ 如何编译动态库/静态库之编译Qt4.8.5静态库
1. 下载Qt 。需要注册一下账号!
a) 选择你需要的版本
㈣ CodeBlocks 如何搭建一个编译Qt程序的环境
你肯定也是照着这个做的吧
http://www.qtcn.org/bbs/read.php?tid=11847
你是到哪一步不行的?
㈤ 命令行编译qt程序 有几种方式
一、环境配置
1
要想使用Qt进行命令行编译,环境配置是必不可少的一步。环境配置好以后,我们才能使用相应的qmake,nmake等命令,并且链接到编译程序时所需要的头文件和库文件。
小提示:为了帮助大家解决环境配置的问题,新版Qt已经自带了相应的批处理文件,我们只要在编译前执行对应的批处理文件即可。
2
首先,我们在命令行编译时需要运行qmake.exe,因此我们需要将该文件的路径添加到PATH变量中。要想做到这一点,我们只需要执行Qt安装目录下的
Qt5.5.1\5.5\msvc2013\bin\qtenv2.bat 批处理即可。
3
其次,在编译过程中,我们还需要用到nmake命令,并且链接相应的头文件和库文件,以生成最终的可执行程序。要想做到这一点,我们只需要执行VS安装目录下的
D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat批处理即可。
注意:由于我安装的是Qt for VS2013 32位版,所以运行的是vcvars32.bat,如果你安装的是64位版,请运行vcvars64.bat。
4
至此,环境配置就大功告成了。关于这个环境配置,需要特别指出的是,这个配置是临时性的,只在当前命令行窗口有效;也就是说,你关闭命令行窗口后,均需要重新运行相应的批处理文件。
END
二、命令行编译
首先,将以上两个批处理文件复制到要编译的工程目录中。
然后,点击菜单“文件”-“打开命令提示符”,在该目录下打开命令行窗口。
执行批处理文件qtenv2.bat。注意,由于该批处理会跳转到Qt安装目录,我们执行完毕后需要回到我们的当前目录(我这里由于Qt安装目录与当前目录不在同一个磁盘,只要切换磁盘便回到当前目录了)。
执行批处理文件vcvars32.bat。
下面,正式开始编译。首先,生成工程文件。键入命令:
qmake -project
说明:生成的工程文件名会与你当前的目录名同名。例如,我当前的目录名为test,生成的工程名则为test.pro。
接着,输入qmake test.pro,生成相应的Makefile文件。
最后,键入nmake,生成最终的可执行文件。
㈥ 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++