Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Qt静态生成库时发生链接错误 我正在使用QT4.83和VS2008开发一个本地C++应用程序。由于客户端在其裸机上运行应用程序,因此需要安装VC++2008重新分发包。所以我决定让它静态链接_C++_Qt_Visual Studio 2008_Static Libraries_Linkage - Fatal编程技术网

使用Qt静态生成库时发生链接错误 我正在使用QT4.83和VS2008开发一个本地C++应用程序。由于客户端在其裸机上运行应用程序,因此需要安装VC++2008重新分发包。所以我决定让它静态链接

使用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

我将项目设置C/C++>代码生成>运行时库更改为/MTd。而且 我再次编译了Qt,这次对静态建筑使用了以下命令:;最初在这个博客上找到的

我成功地编译了Qt。但是当我再次尝试编译我的应用程序时,它给了我一些奇怪的错误

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