一些不太有意义的背景:我正在尝试使用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'。我检查了所有可能的地方:
#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不会被拆分,所以我找不到它。它绝对没有出现在那里。
有什么想法吗?
答案 0 :(得分:0)
好的,我明白了。问题确实出现在我在CGAL.lib文件中找到的/ DEFAULTLIB中。
事实证明,当Visual Studio构建.lib文件并遇到#pragma comment
指令时,它会留下一些如何链接此库的说明。据我了解,它只是告诉链接器在链接时使用/DEFAULTLIB选项。然后链接器尝试在搜索列表中添加此库,即使它没有未解析的外部。
所以我在构建项目时试图删除#pragma comment
指令,但是我应该在构建CGAL项目时尝试删除它。后者工作正常。