2

一些不太有意义的背景:我正在尝试使用 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”。我检查了所有可能的地方:

  • Linker->Additional Dependencies 在我的项目中没有这样的库
  • 我的项目没有对此库的引用
  • 以上适用于我的解决方案中的所有项目
  • 任何包含的 .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 没有被分割成部分,所以我找不到它。它绝对没有出现在那里。

有任何想法吗?

4

1 回答 1

0

好的,我想通了。问题确实出在我在 CGAL.lib 文件中找到的这个 /DEFAULTLIB 中。

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

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

于 2012-02-27T16:15:41.927 回答