为什么VisualStudio会查找此lib文件?LNK1104错误

JPh*_*618 5 c++ linker boost visual-studio-2010

我们有一个使用VS2008和boost 1_42的大型项目.我正在尝试升级到VS2010并提升1_44.我安装了VS2010并提升了1_44并转换了项目.现在我正在尝试构建,并且所有内容都会编译,但在链接时会失败:

LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc90-mt-1_42.lib'

我已经将include和lib目录更改为指向新的boost 1_44文件,并且我已经重命名了旧的boost 1_42目录.

当链接器仅使用1_44头时,为什么链接器仍然在寻找vc90-1_42文件?有没有办法可以确定链接器想要这个文件的原因?链接器显然认为它需要文件,但为什么呢?

我已经清理了项目,我正在重新构建以确保删除任何旧的构建文件.

Ral*_*alf 5

我也遇到过几次这个问题.它通常是一些旧的临时文件,但在你的情况下,清洁并不总是立即做到这一点.您的项目是否包含可能已使用1.42构建的任何静态库?

你可以尝试一些可能有助于追踪你的问题的东西:将旧的boost目录重命名为它的原始名称

  • 清洁解决方案
  • 在C/C++ - >命令行 - >其他选项下添加"/ showIncludes"
  • 在链接器 - >命令行 - >其他选项下添加"/ verbose:lib"
  • 重建所有

然后在构建时,您将能够在输出窗口中看到包含1.42标题的位置等.不知何故,这样做有助于我追踪问题所在.


Jer*_*fin 4

除了更改 lib 目录之外,您还需要更改 boost 库的名称。那是在链接器中| 项目设置的输入部分。

您添加的评论清楚地表明,对 Boost 1.42 库的依赖是由另一个尚未重建的库间接创建的。

为此,您基本上有两种选择:要么将该库作为项目添加到您的主解决方案中,并确保它具有足够的依赖项信息,以便在升级 Boost 时重新构建它,或者在/Zl构建您的解决方案时使用编译器开关图书馆。这告诉编译器您正在构建一个库,因此您不想像这样嵌入库依赖项。

  • Boost 使用自动链接,因此我不会手动列出“链接器|输入”部分中的所有文件。 (2认同)