【发布时间】:2015-12-03 18:13:55
【问题描述】:
有没有办法诊断导致链接器问题的原因?
我一直在将我的项目与 Wt (webtoolkit.eu) 项目链接时遇到问题。在我的项目很小的时候,链接器在其默认设置上工作。
但是,当我的项目开始变大时,链接器会运行几个小时,但该过程不会完成或报告任何错误。我通过禁用增量链接器解决了这个问题,之后链接器完美运行。
现在,我已将我的项目分为 3 个 CMake 项目(又名目标)。第 2 个是静态库,第 3 个是可执行目标。这 3 个项目还与 Wt 项目静态链接。但是,链接器进程永远不会完成或报告增量和非增量设置的任何错误。
其他信息:
在发布模式下成功链接
使用 /bigobj 作为编译器会报错
从可执行项目属性->链接器->命令行复制的链接器命令行
发布模式(链接成功)
/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
调试模式(不链接)
/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
【问题讨论】:
-
您是否在非本地驱动器上进行实时投影?或者您的工作空间有限?两者都会大大减慢 VS 的编译和链接过程。
-
@AnonMail 嘿,不,我有足够的空间,它在我的本地驱动器上。问题不在于它很慢......它永远不会完成
-
我唯一能想到的就是链接器内存不足。
-
@AnonMail 我的系统有足够的内存,虽然我不太确定
-
将项目分成几个静态库对您遇到的任何链接器问题都无济于事,因为 lib 只是 .obj 文件的容器,因此所有 obj 文件的实际链接仍在您的最终项目中进行。跨度>
标签: c++ visual-c++ linker