我在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
的引用?
答案 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.lib
是boost_thread-vc90-mt-1_44.dll
的导入库。但是,您似乎静态链接CRT,因此boost自动链接功能也尝试链接静态Boost库,并且它会寻找名为libboost_thread-vc90-mt-1_44.lib
的 static Boost.Thread库。< / p>
有关详细信息,请参阅this question。