CMake Find.Boost没有在帐户中进行配置

时间:2012-12-13 17:25:55

标签: c++ boost compilation cmake

当尝试使用boost进行编译时,所有内容都适用于Windows,但是当我尝试使用linux进行编译时,似乎使用SET命令给出的配置不会被FindBoost考虑。

执行以下操作时,

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,似乎是库中的静态和多线程版本。我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果查看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”的libs有时只是带有“-mt”的libs的符号链接,所以如果将Boost_USE_MULTITHREADED设置为OFF将导致链接多线程库。

相关问题