首页 文章

Visual Studio(C)自动链接到不需要的lib文件版本

提问于
浏览
1

我试图在Visual Studio 2013中创建一个C项目,该项目具有CGAL和Boost(以及其他几个库)作为依赖项 . 我最好动态地链接到这些库 . 另外,出于性能原因,我想链接到这些库的"Release"版本(而不是"Debug"版本) .

从一个空的C项目开始,我添加了上述库的头文件的路径,如下图所示:

Include directories

在链接器选项中,我然后添加了包含外部库的DLL和lib文件的目录 . ( CGAL 目录包含CGAL编译的DLL文件以及lib文件) .

enter image description here

此时,我还没有添加单个“lib”文件“Additional Dependencies”对话框:

enter image description here

现在出现了一些奇怪的事情,我无法解释原因 . 如果我尝试按原样构建项目(在"Debug"配置下),我得到一个关于链接器无法找到 CGAL-vc120-mt-gd-4.7.libLNK1104 错误 . 我知道错误意味着我应该在"Additional Dependencies"对话框中添加 lib 文件...

enter image description here

But wait... WHAT...?!!
Visual Studio如何知道如何自动链接此lib文件?!更糟糕的是,它如何知道它需要图书馆的"debug"版本? (带 gd 后缀) . 另外,它怎么知道我用VS2013编译了CGAL !! ??起初,我虽然该项目是从我系统中某处的某些预设属性表继承属性 . 但我确信情况并非如此,因为即使是从头开始创建的项目,此行为也会显示出来 .

我的主要问题是,您如何强制Visual Studio链接到此库的"Release"版本? (例如 CGAL-vc120-mt-4.7.lib

边题但相关:我甚至连接DLL文件?我如何确定我在做动态链接而不是静态链接?

1 回答

  • 2

    这可能是由于 #pragma comment(lib) 机制而发生的 - 例如见What does "#pragma comment" mean?

    这是编译器为链接器发出指令的一种方式,以便它可以根据编译器版本决定库的多个版本 . 在这种情况下,它意味着它可以自动获取正确版本的库(调试与发布,vs2013 vs vs2015,MT与MD等) . 当您在Additional Dependencies中添加对库的显式引用时,它现在正在尝试查找两个文件 .

    因此,要解决此问题,请将其从Additional Dependencies中删除,然后让VS选择正确的库 . 如果您收到LNK1104错误,则表明链接库路径未正确设置,或者您没有找到它正在查找的CGAL库文件 . 您可以在“项目选项”中增加链接器的详细程度设置,以获取有关正在发生的事情的更多详细信息 .

相关问题