c++ - 为什么在构建过程中 msbuild 和 link.exe 是 "hanging"?

标签 c++ visual-studio msbuild batch-file linker

我们有一些 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(代码速度较慢)。

VS2012 screenshot for setting

关于c++ - 为什么在构建过程中 msbuild 和 link.exe 是 "hanging"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1080757/

相关文章:

visual-studio-2010 - 如何从 Visual Studio 生成后事件启动后台任务?

c# - 条件编译和框架目标

msbuild 文件更新安装项目

c++ - 为什么 std::map 没有 insert(key &, value & v) 类型的插入函数

visual-studio - 如何将 Sublime Text 语法高亮文件转换为 visual studio 的 textmate 语法?

c# - 来自 C# : "DLL initialization routine failed" on Windows 10 的 gcc DLL

visual-studio - “Tabify” Visual Studio解决方案中的所有文件?

c++ - 用计数器扩展参数包

C++ cli 子命令(使用 tclap)

c++ - 使用 Assimp 在运行时更改 .OBJ 的内存纹理