在 qt5 中设置链接器选项

Posted

技术标签:

【中文标题】在 qt5 中设置链接器选项【英文标题】:setting linker options in qt5 【发布时间】:2016-02-14 23:35:25 【问题描述】:

我使用以下选项静态编译了 qt 5.5.1:

configure -static -release -platform win32-msvc2013

现在,当我尝试编译一个不使用任何 qt 库(只是普通 c++ 应用程序)的简单 hello world 程序时。

问题是我无法使用 /MT 标志为程序设置链接器选项以使用静态 msvc 库。我将此添加到项目文件中:

CONFIG += static
QMAKE_CFLAGS_RELEASE += -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG += -Zi -MTd

我收到以下错误:

msvcprt.lib(locale0_implib.obj):-1: error: LNK2038: mismatch detected for     'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease' in main.obj

:-1: warning: LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library

【问题讨论】:

【参考方案1】:

如果我没记错的话,这也是你在使用 Visual Studio 时会经常遇到的问题。所以修改构建配置,如警告消息所示,请在构建命令中添加 NODEFAULTLIB 预处理器。

【讨论】:

好的,我重新编译了Qt,错误消失了,但它仍然将程序编译为动态链接而不是静态链接,也尝试了NODEFAULTLIB。【参考方案2】:
QMAKE_CXXFLAGS_RELEASE += -O2 -MT
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CXXFLAGS_DEBUG += -Zi -MTd

你也可以试试

LIBS += -lLIBRARY /NODEFAULTLIB:library

【讨论】:

谢谢 我试过了,但还是不能编译静态链接的程序,这是编译输出C:\Qt\Qt5.5.1.2\Tools\QtCreator\bin\jom.exe -f Makefile.Release cl -c -nologo -Zc:wchar_t -FS -O2 -MD -Zc:strictStrings -GR -W3 -w34100 -w34189 -w44996 -EHsc -DUNICODE -DWIN32 -DNDEBUG -I..\hello_cpp -I. -IC:\Qt\Qt5.5.1.2\5.5\msvc2013static\qtbase\mkspecs\win32-msvc2013 -Forelease\ @C:\Users\Mohamed\AppData\Local\Temp\main.obj.56044.16.jom main.cpp 即使我在 .pro 文件中添加了 -MT,编译时也可以看到它正在传递 -MD 参数,无论如何我已经找到了解决方法并编写了它。感谢您的帮助。【参考方案3】:

我想通了,clean 命令没有删除 MAKEFILE.RELEASE,所以我不得不手动删除文件,qmake 生成了一个带有正确 -MT 参数的新文件。 感谢大家的帮助。

【讨论】:

以上是关于在 qt5 中设置链接器选项的主要内容,如果未能解决你的问题,请参考以下文章

在 CodeBlocks 中设置 OpenGL

如何在 ADF 中设置滚动条位置

用于在 jquery 插件中设置样式以消除冲突的选择器

qt creator qt5.1 vs2010 使用静态库时链接器错误

mobx对修饰器的实验支持功能在将来的版本中可能更改。在 “tsconfig“ 或 “jsconfig“ 中设置 “experimentalDecorators“ 选项以删除此警告

在js中设置超链接中的onClick事件不可用,怎么弄