使用Qt静态生成库时发生链接错误 我正在使用QT4.83和VS2008开发一个本地C++应用程序。由于客户端在其裸机上运行应用程序,因此需要安装VC++2008重新分发包。所以我决定让它静态链接
我将项目设置C/C++>代码生成>运行时库更改为/MTd。而且 我再次编译了Qt,这次对静态建筑使用了以下命令:;最初在这个博客上找到的 我成功地编译了Qt。但是当我再次尝试编译我的应用程序时,它给了我一些奇怪的错误使用Qt静态生成库时发生链接错误 我正在使用QT4.83和VS2008开发一个本地C++应用程序。由于客户端在其裸机上运行应用程序,因此需要安装VC++2008重新分发包。所以我决定让它静态链接,c++,qt,visual-studio-2008,static-libraries,linkage,C++,Qt,Visual Studio 2008,Static Libraries,Linkage,我将项目设置C/C++>代码生成>运行时库更改为/MTd。而且 我再次编译了Qt,这次对静态建筑使用了以下命令:;最初在这个博客上找到的 我成功地编译了Qt。但是当我再次尝试编译我的应用程序时,它给了我一些奇怪的错误 1>Linking... 1>qtmaind.lib(qtmain_win.obj) : error LNK2005: "public: bool __thiscall QBasicAtomicInt::deref(void)" (?deref@QBasicAtomic
1>Linking...
1>qtmaind.lib(qtmain_win.obj) : error LNK2005: "public: bool __thiscall QBasicAtomicInt::deref(void)" (?deref@QBasicAtomicInt@@QAE_NXZ) already defined in QtCored4.lib(QtCored4.dll)
1>qtmaind.lib(qtmain_win.obj) : error LNK2005: "public: bool __thiscall QBasicAtomicInt::operator!=(int)const " (??9QBasicAtomicInt@@QBE_NH@Z) already defined in QtCored4.lib(QtCored4.dll)
1>qtmaind.lib(qtmain_win.obj) : error LNK2005: "public: __thiscall QString::~QString(void)" (??1QString@@QAE@XZ) already defined in QtCored4.lib(QtCored4.dll)
我更改了一些lib文件,但随着每次更改,情况变得更糟;例如,我尝试使用QtCored.lib而不是QtCored4.lib,因为它是编译后新创建的
我想我在构建静态Qt库的过程中遗漏了一些东西。尽管这个问题自2012年底以来一直没有得到回答,但我认为最好进一步充实关于这个问题的一般知识,以便每个线程至少显示一个响应 该问题源于静态构建Qt时在链接过程中包含QtCored4.dll和QtGuid4.dll。要从构建过程中排除这些,只需在配置Makefile时添加QT_nodell作为预处理器指令。例如,对于Microsoft Visual Studio 2008,可以使用以下命令来实现这一点:
configure -static -debug -D QT_NODLL -platform win32-msvc2008
在运行NMAKE之前
使用VisualStudioIDE构建静态Qt应用程序时,一个好的做法是使用configuration Properties->General->configuration type下拉菜单将项目配置类型修改为Makefile。一旦应用了这些设置,用户还可以在“配置属性->常规->nmake”下指定要执行的qmake和nmake步骤,以生成和重新生成所有选项
例如,静态调试配置的生成命令行是:
nmake debug
以及所有等效的重建:
qmake app_debug.pro && nmake debug
我希望这有帮助
qmake app_debug.pro && nmake debug