我想用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
的错误,如下图所示:
我发现这是由于在调试模式下可用但在发布模式下不可用的符号。
所以我在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
导致未解析的外部符号错误。
答案 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。