C++ 链接器如何选择要包含以生成的.lib文件?

C++ 链接器如何选择要包含以生成的.lib文件?,c++,visual-studio-2010,dependencies,cgal,C++,Visual Studio 2010,Dependencies,Cgal,一些不太有意义的回溯:我正在尝试使用VisualStudio2010构建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'是默认名称,我通过修改一些C

一些不太有意义的回溯:我正在尝试使用VisualStudio2010构建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'。我已经检查了所有可能的地方:

在我的项目中的链接器->附加依赖项中没有这样的库 我的项目中没有对此库的引用 以上内容适用于我的解决方案中的所有项目 在我生成的任何包含的.h文件中都没有pragma commentlib、gmp-vc100-mt-sgd.lib指令。我为项目中的所有文件预处理器输出 我试图重建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中

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


所以,我在构建项目时试图删除pragma comment指令,但在构建CGAL项目本身时,我应该尝试删除它。后者很好。

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

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


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

您是否尝试将gmp.lib重命名为gmp-vc100-mt-sgd.lib以检查发生了什么?您是否对整个项目的gmp-vc100-mt-sgd进行了全文搜索?还有一种方法可以捕获在构建过程中提供给链接的完整命令行,请尝试这样做。您是否使用cmake生成解决方案?@karlphillip是的,在这种情况下一切正常。@MK我已经检查了我项目的链接器命令行:其中没有提到gmp-vc100-mt-sgd。我试图搜索整个项目,搜索目录中的所有文件,但没有结果。您是否尝试将gmp.lib重命名为gmp-vc100-mt-sgd.lib以检查发生了什么?您是否在整个项目中对gmp-vc100-mt-sgd进行了全文搜索?还有一种方法可以捕获在构建过程中提供给链接的完整命令行,请尝试这样做。您是否使用cmake生成解决方案?@karlphillip是的,在这种情况下一切正常。@MK我已经检查了我项目的链接器命令行:其中没有提到gmp-vc100-mt-sgd。我试图搜索整个项目,搜索目录中的所有文件,但没有结果。