编译QT错误

问题描述 投票:0回答:1

我想用QT 5.9.3编译Visual Studio 2017。我在QMAKE_CFLAGS_DEBUG文件中将-Zi -MD更改为-Zi -MDd而不是C:\Qt\5.9.3-x86\qtbase\mkspecs\common\msvc-desktop.conf

但是,当我配置时

configure -debug -confirm-license -nomake examples -nomake tests -opensource -platform win32-msvc -prefix C:\Qt\5.9.3-x86\5.9.3-x86-install

然后运行nmake,我总是得到一个错误的未解析的外部符号__imp___CrtDbgReporterW,如下图所示:

Qt compiler error

我发现这是由于在调试模式下可用但在发布模式下不可用的符号。所以我在NDEBUG之后添加了一个this post-option。但没有运气。我也尝试将QMAKE_CFLAGS_DEBUG推进到-Zi -MD -D"NDEBUG"。但这也没有带来好运。

谁能给我一些关于如何解决这个问题的提示?我需要使用/MD而不是/MDd标志编译的Debug库。

---编辑---

重定向VS2017命令提示符的输出显示文件Debug2.cpp具有link命令

link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /DLL /SUBSYSTEM:WINDOWS /DEF:..\..\..\3rdparty\angle\src\libGLESv2\libGLESv2d.def /MANIFEST:embed /OUT:..\..\..\..\lib\libGLESv2d.dll @C:\Users\user\AppData\Local\Temp\nm88DB.tmp

这导致未解决的外部符号错误。

c++ qt compiler-errors nmake
1个回答
0
投票

您粘贴的样本有一些问题。

首先,它使用命令文件(例如,链接器命令行上的@C:\Users\user\AppData\Local\Temp\nm88DB.tmp),因此我们仍然无法看到传递给链接器的所有命令。

其次,你为同一个cpp文件定义了NDEBUG_DEBUG(例如,第1117行)。后者的存在可能是链接器问题的原因,因为它可能会影响它自动查找CRT的方式。

这可能通过(1)获得一致的预处理器定义和(2)确保在命令行上具有默认库来解决。 (具体来说,您可能需要添加或删除/NODEFAULTLIB:MSVCRT/NODEFAULTLIB:LIBCMTon等链接器命令行。我认为你应该使用后者而不是前者适用于你的情况。)

有关哪些库和定义应该结合在一起的信息,请参阅this article from MSDN

© www.soinside.com 2019 - 2024. All rights reserved.