最近公司一个Windows窗体项目需要兼容调用一个第三方的,64位的dll库。
这个窗体项目是用Qt+msvc2019维护的,调用该第三方dll时,部分方法可用(dll调用成功),部分方法会抛异常。
该第三方dll是用vs2005开发的,经测试可以调用并稳定运行的VS版本为VS2010。
然而Qt官网只提供针对msvc2010的32位的版本,64位的需要自行编译。
经过在网上搜索和尝试,使用下面方法成功编译出Qt+msvc2010的64位版本的库。
下面为编译步骤,
准备源码及编译工具
- 解压qt-everywhere-opensource-src-5.0.0.zip 到
C:\Qt\qt-everywhere-opensource-src-5.0.0
。 - 安装Visual Studio 2010 Professional和Windows SDK 7.1。
Windows SDK 7.1如果安装不上的话,需要先将电脑上的Microsoft Visual C++ 2010 x64和x86 Redistributable卸载掉,再执行安装程序。
- 安装最新版本ActivePerl。
- 安装Python2.7.xx。
配置系统环境变量
- 新增
QTDIR=C:\Qt\qt-everywhere-opensource-src-5.0.0\qtbase
- 新增
QMAKESPEC=win32-msvc2010
- 在PATH中追加
%QTDIR%\bin;
%QTDIR%\..\gnuwin32\bin;
C:\Python27\DLLs;
C:\Python27
编译
- 运行
开始菜单
-Microsoft Visual Studio 2010
-Visual Studio x64 Win64 Command Prompt (2010)
。 - 执行命令
cd c:\qt\qt-everywhere-opensource-src-5.0.0
。 - 执行命令
configure -prefix %CD%\qtbase -debug-and-release -opensource -platform win32-msvc2010
。
中途确认操作时,输入y,然后回车。
等待配置完成。 - 执行命令
nmake
。
此处要等待相当长一段时间。我编译了4个小时以上。
- 编译生成的文件在
C:\Qt\qt-everywhere-opensource-src-5.0.0\qtbase
。
备注
- 论坛中也有用
jom
替代nmake
进行并发编译的,我用jom -j4编译最后出错了,网上说是Python的问题,这个我没有深入去探索。想尝试的话,需要自己安装一个jom。 - 其他版本的Qt,我试过5.1.1的,编译提示opengl相关文件缺失,后来就没深入研究了。
- qt for msvc2010 32位的,官方编译好的离线安装包在这里。
- 编译出的不是Qt Creator,是Qt的库。
Qt Creator我用的最新的,只需要在应用项目里做如下配置,
Qt Version选择C:\Qt\qt-everywhere-opensource-src-5.0.0\qtbase\bin\qmake.exe
。
Compilers选择Microsoft Visual C++ Compiler 10.0 (amd64)
。
Debuggers选择C:\Program Files\Debugging Tools for Windows (x64)\cdb.exe
,这个是Windows SDK 7.1安装时带的cdb。 - Qt5.0.0应用程序发布部署参考这里。
- Qt5.15.1开发的Application配合Qt5.0.0库编译时有少量不兼容,修改为兼容的即可。
- 我的操作系统是Win10。