




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、写这篇文章的目的是为了让Qt像VC+那样,支持一个工程包含多个项目。即1个App+多个动态库。本案例以1个App+1个共享库为例:工程源码我已上传1、在D盘创建空文件夹qMulti2、使用QtCreator创建App应用程序:BigWay。注意:创建模板是App,存放路径是D:qMulti创建完成后,请关闭当前项目。IQtQuiick1Txt40X14TkFliagjm1Q*防&蚊的物件CHJ£3、使用QtCreator创建共享库项目:SmallBoy。注意:创建模板是C+lib,存放路径是D:qMulti*殍r-'&tomsiiict,/妆-v£(
2、健一队基于仲介曲CH库.,用于QPI勺*riLgd。,)运行时肺用的共享CH主,在M也网把中融播机安用苑箕立寓蹄直珠的+白pES项目介绍和位置本咫异w;僦律一个:*库:1目.突出其工立<1B.色星第搔:心n通力学"的江目3545忖一步四51,拘|创建完成后,请关闭当前项目。4、App和Lib创建完成之后,D:qMulti的情况如下:我们手动新建一个文本文件D:qMultiqM,内容如下:TEMPLATEsubdirs#表示这个是Qt跨目录,由多个子项目(如1个应用程序+多个共享库)组成的大项目SUBDIRSSmallBoyBigWay#大项目包含的各个子项目,其
3、中BigWay是应用程序,SmallBoy是共享库CONFIG=ordered#CONFIG选项要求各个子项目按顺序编译,子目录的编译顺序在SUBDIRS中指明到此为止,情况如下:5、使用QtCreator打开大项目qM,可以看到项目树形结构如下:项目一定G日+X!?显Smlti向qWulti一jr*-电斯图町园BigWiy.pre-$ICS头文件口maillwindbw.工-培源文件千日E&ilLUp丁,"mLLHAlTldoYf.Cpp:向,/界面文件盟ina_inwiniow.ni-,血SmallDoy酹SmellBoypro自头文件IqsiHllbcy
4、.hTsmkllbvy.gX0bal.h闩区'源文件弓qsihallboy.cp(1)原始的BigW文件是这样的:#ProjectcreatedbyQtCreator2014-04-13T20:18:17#QT+=coreguigreaterThan(QT_MAJOR_VERSI0NQT+=widgetsTARGETBigWayTEMPLATEappSOURCE=main.cppmainwindow.cppHEADERS+=mainwindow.hFORMS+=mainwindow.ui我们将其修改为:#ProjectcreatedbyQtCreator2014-04-13
5、T19:02:41#QT+=coregui#需要的Qt库greaterThan(QT_MAJOR_VERSI0NQT+=widgetsTARGETBigWay#表示编译后的库名字为BigWayTEMPLATEapp#表示项目是应用程序模式DESTDRJbin#定义项目编译之后生成的结果文件的存放路径win32#表示Windows环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错LIBS+=./bin/SmallBoy.lib即含项目需要用到的共享库unix#表示Linux环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错LIBS+=./bin/libSmallBoy.so#
6、包含项目需要用到的共享库,注意文件名多了关键字"lib"|,扩展名是.soSOURCES#项目中的所有源文件的列表mainwindow.cppHEADERS+=mainwindow.h#项目中的所有头文件的列表FORMS+=mainwindow.ui#项目中的所有.ui文件(由Qt设计器生成)的列表(2)原始的SmallB文件是这样的:#ProjectcreatedbyQtCreator2014-04-13T20:24:55#QT-=guiTARGETSmallBoyTEMPLATElibDEFINE9=SMALLBOY_LIBRARYSOURCE+=qsmal
7、lboy.cppHEADERS=qsmallboy.hsmallboy_global.hunixtarget.path=/usr/libINSTALLS+=target我们将其修改为:#ProjectcreatedbyQtCreator2014-04-13T19:04:24#QT=gui#不需要Qtui库TARGETSmallBoy#表示编译后的库名字为SmallBoyTEMPLATSib#表示项目是共享库模式DEFINE9=SMALLBOY_UBRAR项目所需的额外的预处理程序定义的列表DESTDIR./bin#定义项目编译之后生成的结果文件的存放路径SOURCES=qsmallboy.cp
8、p#项目中的所有源文件的列表HEADERS#项目中的所有头文件的列表smallboy_global.hwin32#表示Windows环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错unix#表示Linux环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错target.path=/usr/libINSTALLS+=target6、Linux环境下使用如果把完整的项目源码qMulti拷贝到UbantuLinux下的Qt编译,编译过程一切OK。但是运行时会报错,说"errorwhileloadingsharedlibraries:libSmallBoy.so.1:ca
9、nnotopensharedobjectfile:Nosuchfileordirectory原因指的是Linux下的共享库路径配置不正确,找不到libSmallBoy.so库文件。默认的linux共享库搜索路径为/lib和/usr/lib两个目录(不包含子目录)。解决方案有两种:(1)把编译生成的四个.so文件全部拷贝到文件系统的路径/usr/lib之下,需要管理员权限。libSmallBoy.sDlibSmallBoy/so.llibSmalllBoyso.1.0libSmallBoy.so.LO.O|再运行程序,OK。(2)修改Linux环境变量LD_LIBRARY_PATH,把Qt编程生
10、成的路径加入。exportLD_LIBRARY_PATH=/usr/local/lib在终端里运行上面这行命令,再运行程序,如果正常就说明解决问题。但是该方法只是临时设置变量LD_LIBRARY_PATH,下次开机,一切设置将不复存在;7、换一种思路建项目之前步骤14讲的是先建项目再建qM文件。其实我们可以采取逆序,先建qM文件,后建子项目SmallBoy和BigWay。我们手动新建一个文本文件D:qMultiqM,内容如下:TEMPLATEsubdirs#表示这个是Qt跨目录,由多个子项目(如1个应用程序+多个共享库)组成的大项目CONFIG=ordered#CONFIG选项要求各个子项目按顺序编译,子目录的编译顺序在SUBDIRS中指明或者用QtCreator新建子目录项目qMulti:粤McPepjirct现目鱼生桂宝本及地踞却愈目导入项目文件用小Cj1:diupwL语一15枝:创江天于非如二的子目录飞日.遭无时让其高地目胡纲猛晒空均.专特的千白r;r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同保证金租赁场地协议
- 电竞比赛票务服务合同样本
- 电路理论考试模拟题+答案
- 植物练习题(附答案)
- 物流行业集中度
- 股东内部股权收购合同
- 邯郸市大型公立医院PPP项目合同
- 维修车间安全培训
- 环保污水处理技术服务合同
- 廉洁工程承包合同承诺
- 磁共振灌注检查技术及临床应用(一)课件
- 兴义万峰谷新型旅游文化产业综合体项目总体概念性方案设计
- 消防安全标志解读课件
- 2022上半年事业单位联考《职业能力倾向测验》A类真题及答案
- 保健院业务部门绩效考核实施方案(试行)及质量控制指标
- 马鞍山东站站房工程指导性施工组织设计
- 电力电缆工程施工作业危险点辨识及预控措施手册
- 精神障碍检查与诊断试题
- 研究生英语综合教程(下)1-10单元全部答案及解析
- 中医护理原则和方法
- 光伏电站验收申请及验收报告样板
评论
0/150
提交评论