【问题标题】:VC++ Linker complaining about a library which is not specified in the project fileVC++ 链接器抱怨项目文件中未指定的库
【发布时间】:2013-03-12 18:39:44
【问题描述】:

我在 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 的引用?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我想我已经设置好了,所以库确实需要明确提及...没有 BOOST_HOME,因为我有不同项目的多个版本。但是...当没有其他项目抱怨时,这似乎无法回答问题...您的意思是它使用 boost 并自动触发 lib 的链接?
    【解决方案2】:

    boost_thread-vc90-mt-1_44.libboost_thread-vc90-mt-1_44.dllimport 库。但是,您似乎静态链接 CRT,因此 boost 自动链接功能也会尝试链接静态 Boost 库,它会寻找名为 libboost_thread-vc90-mt-1_44.libstatic Boost.Thread 库。

    更多详情请见this question

    【讨论】:

    • 我还没有构建 boost,它是作为这个项目的预构建依赖项而来的。然而,CRT 设置可能是由于 CMake 造成的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多