我试图在Visual Studio 2013中创建一个C项目,该项目具有CGAL和Boost(以及其他几个库)作为依赖项 . 我最好动态地链接到这些库 . 另外,出于性能原因,我想链接到这些库的"Release"版本(而不是"Debug"版本) .
从一个空的C项目开始,我添加了上述库的头文件的路径,如下图所示:
在链接器选项中,我然后添加了包含外部库的DLL和lib文件的目录 . ( CGAL
目录包含CGAL编译的DLL文件以及lib文件) .
此时,我还没有添加单个“lib”文件“Additional Dependencies”对话框:
现在出现了一些奇怪的事情,我无法解释原因 . 如果我尝试按原样构建项目(在"Debug"配置下),我得到一个关于链接器无法找到 CGAL-vc120-mt-gd-4.7.lib
的 LNK1104
错误 . 我知道错误意味着我应该在"Additional Dependencies"对话框中添加 lib
文件...
But wait... WHAT...?!!
Visual Studio如何知道如何自动链接此lib文件?!更糟糕的是,它如何知道它需要图书馆的"debug"版本? (带 gd
后缀) . 另外,它怎么知道我用VS2013编译了CGAL !! ??起初,我虽然该项目是从我系统中某处的某些预设属性表继承属性 . 但我确信情况并非如此,因为即使是从头开始创建的项目,此行为也会显示出来 .
我的主要问题是,您如何强制Visual Studio链接到此库的"Release"版本? (例如 CGAL-vc120-mt-4.7.lib
)
边题但相关:我甚至连接DLL文件?我如何确定我在做动态链接而不是静态链接?
1 回答
这可能是由于
#pragma comment(lib)
机制而发生的 - 例如见What does "#pragma comment" mean?这是编译器为链接器发出指令的一种方式,以便它可以根据编译器版本决定库的多个版本 . 在这种情况下,它意味着它可以自动获取正确版本的库(调试与发布,vs2013 vs vs2015,MT与MD等) . 当您在Additional Dependencies中添加对库的显式引用时,它现在正在尝试查找两个文件 .
因此,要解决此问题,请将其从Additional Dependencies中删除,然后让VS选择正确的库 . 如果您收到LNK1104错误,则表明链接库路径未正确设置,或者您没有找到它正在查找的CGAL库文件 . 您可以在“项目选项”中增加链接器的详细程度设置,以获取有关正在发生的事情的更多详细信息 .