编译QT错误

时间:2017-12-21 12:58:36

标签: c++ qt compiler-errors nmake

我想用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

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

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

---编辑---

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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