VS2010下Qt、OpenCV静态编译
1VS2010下Qt、OpenCV静态编译
11. 静态编译Qt库
11.1解压Qt源文件,静态编译Qt库
21.2静态编译前的修改
21.3 VS2010下静态编译
51.4 在VS2010上安装Qt插件
61.5 VS2010下设置Qt静态编译环境
91.6 静态链接Qt插件
122. 静态链接OpenCV库
122.1 解压OpenCV,设置环境变量
122.2. 在VS上链接OpenCV库
142.3 设置VS2010为静态链接输出模式
1. 静态编译Qt库
1.1解压Qt源文件,静态编译Qt库
以建议用源码压缩包qt-everywhere-opensource-src-4.8.4.zip,直接解压到自己指定的目录下即可。用Qt源文件编译静态库出错较少,编译出来的文件也较小。
1.2静态编译前的修改
1.删除源码包中bin目录下的syncqt和syncqt.bat文件
或剪切到别的位置。如不修改将发生 Perl not found in environment - cannot run syncqt 错误
2.修改源码目录下\mkspecs\win32-msvc2010下的qmake.conf文件
a) CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target(整一行替换掉)
b) QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t(把后面的“-”号删除)
c) 把文件中的QMAKE_CFLAGS_RELEASE,QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO,QMAKE_CFLAGS_DEBUG这3处后面的MD, MDd因为这一次是要静态编译,所以MD改为MT,MDd改为MTd。
3. 修改src\3rdparty\webkit\Source\WebCore\platform下的DefaultLocalizationStrategy.cpp,定位到327行,将本行替换成return WEB_UI_STRING("Look Up \"
\"", "Look Up context menu item with selected word").replace("", truncatedStringForLookupMenuItem(selectedString));
注意原文中双引号用错了,导致编译时会出现U1077错误。
1.3 VS2010下静态编译
在VS2010的命令提示符下进行,开始->Microsoft Visual Studio 2010->Visual Studio Tools(中文版是“工具”)->Visual Studio 命令提示,打开如下
用“cd”命令进入源码目录下,进行configure命令
然后输入一下命令configure -debug-and-release -fast -static -platform win32-msvc2010 -no-qt3support -script -scripttools -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qt-sql-sqlite -plugin-sql-sqlite -qt-sql-odbc -plugin-sql-odbc -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -nomake demos -nomake examples -nomake docs -mp
注意,这里我们为了节省时间,并没有编译根目录下的demos、example、docs文件夹,如果有需要的话,可以去除-nomake demos -nomake examples -nomake docs命令,那么则会编译所有文件夹,或者是编译完成后,用cd命令进入相应文件夹下,运行nmake命令。有关configure命令参数的部分说明,请看这个链接:http://www.cnblogs.com/elect-fans/archive/2012/03/28/2420647.html
然后输入”o”选择开源版本,再输入“y”,确认。
等几分钟完成后,会提示输入nmake命令,此时再输入“nmake”即可。时间从一个小时到两个小时不等。
1.4 在VS2010上安装Qt插件
qt-vs-addin-1.1.10.exe双击直接安装,一路“next”即可。安装完之后打开VS2010,可以看到Qt菜单栏,可以通过QT菜单进行QT编译库定位以及打开pro工程文件,也可以通过新建工程项目来创建QT工程。
此时,有两个方法可以打开或建立Qt工程文件,一个是直接用Qt菜单栏打开.pro文件,另一个方法是,把.pro文件转换成VS2010可以是别的.sln文件,同样可以用VS2010的命令,进入Qt安装目录或源码加压目录下的examples或者demos文件夹下的例程里,用qmake -tp vc projname.pro命令,把.pro文件生成相应的.sln文件
然后就可以用VS2010打开相应的项目。
1.5 VS2010下设置Qt静态编译环境
安装Qt插件后还不能在VS上打开Qt项目,还需要安装Qt软件,用来打开Qt文件,比如*.pro文件(这里只是为了打开项目文件,链接时用的是前面我们编译的静态库)。安装
安装完成后设置环境变量:
点击 计算机->属性->高级系统设置->环境变量,在用户变量或者系统变量中修改,新建环境变量名字为”QTDIR”,值为”D:\Qt\4.8.4″。 在PATH环境变量中添加:”D:\Qt\4.8.4\bin″,然后重启即可;
现在我们就可以通过VS2010的Qt菜单栏打开Qt项目了,打开后
a) 点击Qt option,添加之前编译的静态链接库
路径直接选择编译后静态编译后Qt库的目录就可以了,如D:\Qt4.8.4_static,名字自己取,然后点击确定。然后点击Qt Project Setting
在版本一栏,选择新添加的静态库即可。
走到这一步,只要静态编译那一步没有出错,则静态链接Qt库配置完毕。
1.6 静态链接Qt插件
1. 往自己项目工程的*.pro文件里面添加如下语句
QTPLUGIN += qjpeg \
qgif \
qkrcodecs \\根据自己需求添加所需插件
2.打开项目工程,在main.cpp里面添加宏“#include ”,然后用语句Q_IMPORT_PLUGIN() ,添加所需的插件,如下所示:
Q_IMPORT_PLUGIN(qsqlite)
Q_IMPORT_PLUGIN(qico)
Q_IMPORT_PLUGIN(qsqlodbc)
Q_IMPORT_PLUGIN(qcncodecs)
3.添加插件库目录
打开 Property->Linker->General->Additional Library Directories 添加相应插件的目录。跟插件相关的*.lib文件的目录在 Qt/plugins 目录下找,比如有关sql数据库的驱动库文件目录为D:\Qt4.8.4_static\plugins\sqldrivers
然后,在 Property->Linker->Input->Additional Dependencies页面里面添加相应库名字,如果是debug模式下,在名字后面加‘d’。
4.编译通过,说明添加成功;如果编译有问题,可能还需要在插件的*.pro文件里面添加“CONFIG += static ”,然后重新编译插件的*.pro工程文件。相关插件的工程文件目录在Qt \src\plugins 下。
可以参考如下文档http://qt-project.org/doc/qt-4.8/plugins-howto.html
2. 静态链接OpenCV库
比较新版本的OpenCV,比如2.4.3,2.4.4都配置有自己的静态库,供用户使用,因此我们只需要正确设置链接就可以了。
2.1 解压OpenCV,设置环境变量
1.双击OpenCV-2.4.4-win-superpack.exe,解压到指定文件路径;
2.右击“我的电脑”选“属性”->“高级系统设置”->“环境变量”,在用户变量或者系统变量中设置,在path中添加C:\Program Files\opencv\build\x86\vc10\bin
3.添加环境变量“OPENCV”,内容:C:\Program Files\opencv\build
2.2. 在VS上链接OpenCV库
打开Qt或者VS项目,点击 属性->VC++目录->库目录,往库目录里添加OpenCV静态库路径。
比如:E:\opencv\build\x86\vc10\staticlib
然后,在Linker选项->Input->Additional Dependencies选择,然后在编辑框中输入一下内容后确定:
vfw32.lib
comctl32.lib
zlibd.lib
libjasperd.lib
libjpegd.lib
libpngd.lib
libtiffd.lib
IlmImfd.lib
opencv_core244d.lib
opencv_imgproc244d.lib
opencv_highgui244d.lib
opencv_ml244d.lib
opencv_video244d.lib
opencv_features2d244d.lib
opencv_calib3d244d.lib
opencv_objdetect244d.lib
opencv_contrib244d.lib
opencv_legacy244d.lib
opencv_flann244d.lib
从上面添加的库也可以看出,我用的OpenCV库是2.4.4版本的,其他版本的库做相应的修改,比如把opencv_flann244d.lib 改成opencv_flann243d.lib(2.4.3版本)。
2.3 设置VS2010为静态链接输出模式
还是在项目属性面板里设置,属性->C/C++ ->代码生成->运行库,把运行库设置为MT,若是DEBUG选择MTD,然后编译。
然后重新编译项目,建议编译之前先对解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
进行一次清理,方法是在解决方案上点击右键->清理。
如果出现Cannot find or open the PDB file 的提示信息,是因为静态链接的时候缺少PDB文件信息,一般不影响编译结果,如果要消除这个提示可以按如下步骤进行:
1.打开 工具->选项->调试->符号,在符号文件选择窗口那里选上“Microsoft符号服务器”,然后确定,重新编译程序,程序自动从网上下载符号缓存,时间比较长。
2.下载一次完成之后,找到下载缓存的目录,
看到此目录下符号缓存了吗?(上图中我已经改过缓存目录,不是原来的默认目录)找到这个目录拷贝出来,找个地方存放。接下来就是去掉Microsoft符号服务器,要是不去,每次都要从Microsoft下载很麻烦,已经缓存了,我们就可以利用好这些缓存,至此问题解决。