c++ - 诊断 Visual C++ 链接器

标签 c++ visual-c++ linker

有没有办法诊断导致链接器问题的原因?

在将我的项目与 Wt (webtoolkit.eu) 项目链接时,我一直遇到问题。一开始,当我的项目很小的时候,链接器使用它的默认设置。

但是,当我的项目开始变大时,链接器会运行数小时,但该过程不会完成或报告任何错误。我通过禁用增量链接器解决了这个问题,之后链接器工作正常。

现在,我将我的项目分为 3 个 CMake 项目(也称为目标)。 2 个是静态库,而第 3 个是可执行目标。这 3 个项目还与 Wt 项目静态链接。但是,链接器进程永远不会完成或报告有关增量和非增量设置的任何错误。

附加信息:

Release模式链接成功

使用/bigobj 作为编译器会在没有它的情况下给出错误

从可执行项目属性->链接器->命令行复制的链接器命令行

Release模式(链接成功)

/OUT:"D:\Programming\WebWidgets\build\src\WWTestApp\Release\WWTestApp.exe" /MANIFEST /NXCOMPAT /PDB:"D:/Programming/WebWidgets/build/src/WWTestApp/Release/WWTestApp.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "comdlg32.lib" "advapi32.lib" "..\WebWidgets\Release\WebWidgets.lib" "..\DboInstaller\Release\DboInstaller.lib" "C:\Program Files\WT\lib\wt.lib" "C:\Program Files\WT\lib\wthttp.lib" "C:\Program Files\WT\lib\wtdbo.lib" "C:\Program Files\WT\lib\wtdbosqlite3.lib" "C:\Program Files\WT\lib\wtdbomysql.lib" "C:\Program Files\MySQL\MySQL Connector C 6.1\lib\libmysql.lib" /IMPLIB:"D:/Programming/WebWidgets/build/src/WWTestApp/Release/WWTestApp.lib" /MACHINE:X64 /INCREMENTAL:NO /PGD:"D:\Programming\WebWidgets\build\src\WWTestApp\Release\WWTestApp.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"WWTestApp.dir\Release\WWTestApp.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"C:/Boost/lib" /LIBPATH:"C:/Boost/lib/Release" /TLBID:1

RelWithDebInfo(链接成功)

/OUT:"D:\Programming\WebWidgets\build\src\WWTestApp\RelWithDebInfo\WWTestApp.exe" /MANIFEST /NXCOMPAT /PDB:"D:/Programming/WebWidgets/build/src/WWTestApp/RelWithDebInfo/WWTestApp.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "comdlg32.lib" "advapi32.lib" "..\WebWidgets\RelWithDebInfo\WebWidgets.lib" "..\DboInstaller\RelWithDebInfo\DboInstaller.lib" "C:\Program Files\WT\lib\wt.lib" "C:\Program Files\WT\lib\wthttp.lib" "C:\Program Files\WT\lib\wtdbo.lib" "C:\Program Files\WT\lib\wtdbosqlite3.lib" "C:\Program Files\WT\lib\wtdbomysql.lib" "C:\Program Files\MySQL\MySQL Connector C 6.1\lib\libmysql.lib" /IMPLIB:"D:/Programming/WebWidgets/build/src/WWTestApp/RelWithDebInfo/WWTestApp.lib" /DEBUG /MACHINE:X64 /INCREMENTAL /PGD:"D:\Programming\WebWidgets\build\src\WWTestApp\RelWithDebInfo\WWTestApp.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"WWTestApp.dir\RelWithDebInfo\WWTestApp.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"C:/Boost/lib" /LIBPATH:"C:/Boost/lib/RelWithDebInfo" /TLBID:1 

Debug模式(不链接)

/OUT:"D:\Programming\WebWidgets\build\src\WWTestApp\Debug\WWTestApp.exe" /MANIFEST /NXCOMPAT /PDB:"D:/Programming/WebWidgets/build/src/WWTestApp/Debug/WWTestApp.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "comdlg32.lib" "advapi32.lib" "..\WebWidgets\Debug\WebWidgets.lib" "..\DboInstaller\Debug\DboInstaller.lib" "C:\Program Files\WT\lib\wtd.lib" "C:\Program Files\WT\lib\wthttpd.lib" "C:\Program Files\WT\lib\wtdbod.lib" "C:\Program Files\WT\lib\wtdbosqlite3d.lib" "C:\Program Files\WT\lib\wtdbomysqld.lib" "C:\Program Files\MySQL\MySQL Connector C 6.1\lib\libmysql.lib" /IMPLIB:"D:/Programming/WebWidgets/build/src/WWTestApp/Debug/WWTestApp.lib" /DEBUG /MACHINE:X64 /INCREMENTAL:NO /PGD:"D:\Programming\WebWidgets\build\src\WWTestApp\Debug\WWTestApp.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"WWTestApp.dir\Debug\WWTestApp.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"C:/Boost/lib" /LIBPATH:"C:/Boost/lib/Debug" /TLBID:1 

最佳答案

我通过强制 Visual Studio 使用工具链的 x64 版本解决了这个问题。很可能它与链接器用尽可寻址空间有关。

关于c++ - 诊断 Visual C++ 链接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073282/

相关文章:

c++ - 当我为我的代码使用 ICC 时链接到 GCC 构建的库

c++ - 仅当链接为 -static 时,才会从链接库调用包装函数

c++ - 变量失去它的值(value)

c++ - 如果调用 RtlSetProcessIsCritical,将命令行与使用 lstrcmpW 的值进行比较将使程序崩溃

c++ - 字节变量值错误

c++ - 让 CMake 在可能的情况下选择静态链接?

c++ - 编译函数时遇到问题

c++ - boost::asio UDP 在同一进程中发送/接收

c++ - 用没有 ‘ ’ 或 ‘\n’ 的 int[10] 写入文件,当我读取它时,有什么不对吗?

c++ - 无法推断 'T' 的模板参数