链接器如何选择要包含的.lib文件来构建?

时间:2012-02-24 16:37:09

标签: c++ visual-studio-2010 dependencies cgal

一些不太有意义的背景:我正在尝试使用Visual Studio 2010构建CGAL。它依赖于GMP和MPFR库。我正在构建依赖于CGAL的项目。

构建项目时,我有链接器错误:

error LNK1104: cannot open file 'gmp-vc100-mt-sgd.lib'

但是,我告诉CGAL在文件gmp.lib中使用GMP。它确实被使用了。但不知何故,链接器还需要gmp-vc100-mt-sgd.lib。因此,'gmp-vc100-mt-sgd.lib'是默认名称,我通过更改一些CGAL配置.h文件将其更改为'gmp.lib'。我检查了所有可能的地方:

  • 链接器中没有这样的lib->我的项目中的附加依赖项
  • 我的项目没有引用此lib
  • 上述内容适用于我的解决方案中的所有项目
  • 任何包含的.h文件中都没有#pragma comment(lib, "gmp-vc100-mt-sgd.lib")指令(我为项目中的所有文件生成了.i预处理器输出)

我试图重建CGAL并重建我的解决方案而没有结果 - 链接器仍然需要旧的'gmp-vc100-mt-sgd.lib'文件。

我被困住了。还有其他选择吗?其他.lib依赖项来自何处? gmp-vc100-mt-sgd.lib的唯一提及是在/ DEFAULTLIB:指令下的CGAL .lib和.obj文件中。我搜索了CGAL解决方案中的所有文件,找到了这个神奇的gmp-vc100-mt-sgd.lib名称没有结果。

我检查了.i文件中的每个#pragma指令,以确保名称gmp-vc100-mt-sgd.lib不会被拆分,所以我找不到它。它绝对没有出现在那里。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,我明白了。问题确实出现在我在CGAL.lib文件中找到的/ DEFAULTLIB中。

事实证明,当Visual Studio构建.lib文件并遇到#pragma comment指令时,它会留下一些如何链接此库的说明。据我了解,它只是告诉链接器在链接时使用/DEFAULTLIB选项。然后链接器尝试在搜索列表中添加此库,即使它没有未解析的外部。

所以我在构建项目时试图删除#pragma comment指令,但是我应该在构建CGAL项目时尝试删除它。后者工作正常。