在 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 中设置链接器选项的主要内容,如果未能解决你的问题,请参考以下文章
qt creator qt5.1 vs2010 使用静态库时链接器错误
mobx对修饰器的实验支持功能在将来的版本中可能更改。在 “tsconfig“ 或 “jsconfig“ 中设置 “experimentalDecorators“ 选项以删除此警告