我们有一些 C++ 解决方案,我们使用为解决方案中的每个配置调用 msbuild.exe 的批处理文件运行一些构建脚本。
这在 3 台开发机器和一台构建机器上运行良好,但随后其中一个项目在链接时开始挂起。这只发生在最新的四核机器上,我认为是 2.8ghz。它运行在 Windows Server 2003 上,其他运行在 XP 或 Vista 上。
即使我更改了 bat 文件中的构建顺序,这种情况也会持续发生。
如果我从该机器上的 IDE 运行构建,它不会挂起。
关于可能导致这种情况的原因有什么想法吗?
我正在使用 Visual Studio 2008。
编辑:
我现在看到当它挂起时,以下正在运行:
- link.exe(2个实例)一个内存占用大,一个内存占用小。
- vcbuild.exe
- msbuild.exe
- vcbuildhelper.exe
- mspdbsrv.exe
编辑:
exe文件存在,pdb文件也存在。
exe 文件被某些进程锁定,我无法删除或移动它。不过,我可以删除 pdb 文件。
如果我只使用 VCBuild.exe,我也有问题。
我决定尝试调试 2 个 link.exe 进程和 mspdbsrv.exe 进程。
当我将调试器/MSdev IDE 附加到它们时,我收到一个消息框,指出应用程序已死锁和/或“所有线程已退出”。
我想我必须检查该机器上安装的 msdev 的服务包。
编辑:
在生成 link.exe 命令后,在 debug.htm 输出文件中我得到了各种输出。
但是,对于版本 buildlog.htm,linke.exe 行是最后一行。
这显然是链接器中的一个挂起。绝对是 Microsoft 的错误。
我现在正试图弄清楚 .rsp(链接器响应)文件是什么。
当我发布时:
link.exe @c:\\Release\RSP00000535202392.rsp /NOLOGO /ERRORREPORT:QUEUE
这是发布构建日志中的最后一行。调试版在那之后有更多的信息。
重新安装不同版本的 Visual Studio 没有解决问题。
我将向 Microsoft 开具问题/工单。如果可以的话,我会发布一个答案。
最佳答案
全程序优化(/GL 和/LTCG)和/MP 不能混用——链接器挂起。我在 Connect 上提出这个问题.
结果是它是 VS2008 中已确认的错误;如果您需要修补程序,请联系 PSS;并且修复包含在 VS2010 中。
如果您不能等那么久,请关闭/MP(编译速度较慢)或/LTCG(代码速度较慢)。
关于c++ - 为什么在构建过程中 msbuild 和 link.exe 是 "hanging"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1080757/