VC ++链接器抱怨项目文件中未指定的库

时间:2013-03-12 18:39:44

标签: visual-studio-2008 visual-c++ boost cmake

我在CMake生成的.vcproj中收到此错误:

Performing Pre-Link Event...
Linking...
LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc90-mt-1_44.lib'

除了库被称为boost_thread-vc90-mt-1_44.lib之外,我根本找不到.vcproj中对此的任何引用。链接器/输入部分,生成的命令行,甚至是在文本编辑器中搜索.vcproj文件。

可能会发生什么,我该如何更好地调查问题?有没有办法让链接器告诉我它首先在哪里找到对libboost_thread-vc90-mt-1_44.lib的引用?

2 个答案:

答案 0 :(得分:3)

Boost使用与Visual Studio的自动链接,因此您无需在任何boost库中显式链接。您可以定义BOOST_ALL_NO_LIB来禁用此功能,但我不建议这样做,它在我的体验中非常有效。

您可以在Visual Studio中使用#pragma comment(lib, "user32.lib")自动链接库。如果你看一下boost / config / auto_link.hpp,你会看到它被使用了。

在你的情况下,它正在寻找boost线程的静态版本,可能是你在构建boost时没有构建那个版本。通过在--build-type=complete选项中指定b2,可以确保构建boost库的静态和动态版本。在这种情况下,您不必担心哪个版本是自动链接的。

答案 1 :(得分:0)

boost_thread-vc90-mt-1_44.libboost_thread-vc90-mt-1_44.dll导入库。但是,您似乎静态链接CRT,因此boost自动链接功能也尝试链接静态Boost库,并且它会寻找名为libboost_thread-vc90-mt-1_44.lib static Boost.Thread库。< / p>

有关详细信息,请参阅this question