VS2010始终重新链接项目

时间:2010-04-14 19:18:07

标签: visual-studio-2010

我正在将复杂的混合C ++ / .NET解决方案从VS2008迁移到VS2010。

升级的解决方案适用于VS2010,但构建系统始终引用一个C ++ / CLI程序集。它不会重新编译任何内容,但链接器会触及该文件。导致构建中下游的连锁反应作为一大堆依赖然后得到重建。

有关如何找出为什么它认为需要重新链接文件的任何想法?我已经打开了详细的构建日志,但没有什么突出的。

2 个答案:

答案 0 :(得分:8)

原来问题是PDB文件名是在两者编译器设置和链接器设置(具有相同名称)下定义的。

这似乎在VS2010中引起了一个问题,因为某个来自中间目录(编译器输出?)的'旧'pdb被复制到输出目录中的一个(链接器输出?)。这导致输出目录中的pdb比某些obj文件旧,并且下次强制重新链接(冲洗和重复)。

清除pdb名称设置似乎可以解决问题,默认设置很好。

答案 1 :(得分:1)

我只是将其添加到记录中,以防其他人在将来遇到此问题。

我们遇到了一个类似的问题,一个大的,混合的FORTRAN / C ++项目重新调整是否有任何改变。当解决方案从VS2008升级到2010年时似乎已经开始了,尽管没有人能够完全记住。

最终,我认真地看了一下(这很烦人,但还不够做任何事情)。通过消除过程,我找到了解决方案:

删除顶级FORTRAN项目的“其他库目录”中的任何引号(即生成可执行文件的引号)。

现在,如果没有证据,我自己也不会相信这一点,所以如果你有自己重现这个错误的冲动:

  1. 打开一个新的VS2010会话。
  2. 创建一个可执行的新FORTRAN项目。
  3. 将其留空,但将其链接到非内置的lib文件(即您自己的一个),并将您的库目录添加到其他库目录。
  4. 检查此编译并正确链接。
  5. 现在尝试在目录周围添加双引号(“),然后点击”Build“几次。如果你的会话就像我的,那么每次都会重新链接。当你删除引号时,它会停止。
  6. 这似乎只是顶级项目的问题,当这些项目是FORTRAN时 - 引号对C ++项目或创建lib的项目没有影响。

    如果VS不需要搜索libs(例如,如果所有的lib都是内置的,如kernel32.lib),则不会发生重新链接,但无论你的lib是否在带引号的目录中都会发生或者不同的。

    如果有人可以证明这个“功能”,请告诉我!