【问题标题】:Cmake add_library with boost source files introduces references to non-existant files带有 boost 源文件的 Cmake add_library 引入了对不存在文件的引用
【发布时间】:2011-03-28 20:13:16
【问题描述】:

我们正在构建一个跨平台实用程序,它必须占用很小的空间。我们一直在需要时从 boost 中提取头文件,但现在我们必须链接到一些 boost C++ 线程代码。最简单的直接解决方案是使用 CMake 的“add_library”命令创建我们自己的自定义库,以创建由一些 boost 线程源文件组成的静态库。这些编译没有任何问题。

当我尝试从可执行文件链接到这个库时,就会出现困难。 Visual Studio 2008 返回一个错误,指出它无法链接到“libboost_thread-vc90-mt-sgd-1_40.lib”。真正让我感到困惑的是,我已经浏览了所有源代码和 CMake 配置文件,但找不到对这个 libboost 库的任何引用,这让我认为这是以某种方式自动生成的。

这在 Linux 中运行良好,谁能指出我在 Windows 中遇到这些问题的原因?

【问题讨论】:

    标签: visual-studio boost cmake


    【解决方案1】:

    @Gearoid

    您找到了问题的正确原因,但没有找到正确的解决方案。 BOOST_AUTO_LINK_NOMANGLE 是内部的,即对于库作者来说,定义来控制自动链接。用户级别定义为BOOST_ALL_NO_LIB,定义后会禁用您使用的所有 Boost 库代码的自动链接功能。这在user.hpp 配置标头(see user.hpp near the bottomBoost Config documentation)中进行了描述。您还可以按照该标题中的描述在每个库级别上控制它。

    【讨论】:

      【解决方案2】:

      好吧,事实证明 Boost 为 Visual Studio 使用了这个自动链接功能,该功能嵌入了对损坏的(即平台编译器多线程等)boost 库名称的引用。

      控制这一点的头文件称为“auto_link.hpp”,它位于 boost 包含树的配置目录中。有一个名为“BOOST_AUTO_LINK_NOMANGLE”的特殊预处理器定义可以切换这种行为。

      微软平庸的又一次胜利。

      【讨论】:

        猜你喜欢
        • 2013-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-06
        • 2022-09-27
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        相关资源
        最近更新 更多