【问题标题】:CMake Find.Boost not taking configuration in accountCMake Find.Boost 未考虑配置
【发布时间】:2012-12-13 17:25:54
【问题描述】:

尝试使用 boost 编译时,windows 一切正常,但是当我尝试使用 linux 编译时,FindBoost 似乎没有考虑使用SET 命令给出的配置。

执行以下操作时,

set(Boost_USE_STATIC_LIBS        OFF)
set(Boost_USE_MULTITHREADED      OFF)

find_package(Boost COMPONENTS system REQUIRED)
if (Boost_FOUND)
MESSAGE(${Boost_SYSTEM_LIBRARY})
endif ()

输出是/usr/lib/libboost_system-mt.a,它似乎是库外的静态和多线程版本。我做错了什么?

【问题讨论】:

    标签: c++ boost compilation cmake


    【解决方案1】:

    如果您查看FindBoost.cmake,将 Boost_USE_STATIC_LIBS 指定为 OFF,则使用默认后缀值进行搜索 (CMAKE_FIND_LIBRARY_SUFFIXES),而不是覆盖它们。在我的 linux 机器上

    MESSAGE(${CMAKE_FIND_LIBRARY_SUFFIXES})
    

    返回

    .so.a

    所以

    set(Boost_USE_STATIC_LIBS        OFF)
    

    提供导致 .so 文件优先于 .a 的提示,但如果未找到匹配的 .so 则将包含它们。在这种情况下,问题在于您很可能没有安装共享对象,或者它们安装在 FindBoost.cmake 不查找的地方。要解决此重新运行 cmake 的问题,请使用

    cmake -DBoost_DEBUG=ON 
    

    并查看输出以查看 cmake 在哪里寻找 boost 库,然后检查这些位置以查看 .so 文件是否实际存在。如果它们存在,请确保它们的命名方式与您设置的提示相匹配,例如libboost_system-mt.so 将不匹配,因为您指定应该关闭多线程。

    关于多线程,对于 linux 发行版,没有“-mt”的库有时只是指向带有“-mt”的库的符号链接,所以如果是这种情况,将 Boost_USE_MULTITHREADED 设置为 OFF 将导致链接多线程库。

    【讨论】:

      猜你喜欢
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 2018-03-15
      • 1970-01-01
      • 2016-04-23
      • 2014-12-25
      相关资源
      最近更新 更多