一些不太有意义的背景:我正在尝试使用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没有被分割成多个部分,所以我找不到它。它绝对没有出现在那里。
有什么想法吗?
好吧,我想通了。问题确实出在我在CGAL.lib文件中发现的这个/DEFAULTLIB中。
事实证明,当Visual Studio构建.lib文件并遇到#pragma comment
指令时,它会留下一些关于如何链接此库的说明。据我所知,它只是告诉链接器在链接时使用/DEFAULTLIB选项。然后链接器尝试将此库添加到搜索列表中,即使它没有未解析的外部。
所以我在构建我的项目时试图删除#pragma comment
指令,但我应该在构建CGAL项目本身时尝试删除它。后者运行良好。