2012-12-13 83 views
3

当试图用boost编译时,一切正常与Windows,但是当我尝试与Linux编译,看起来SET命令给出的配置不考虑由FindBoost 。CMake Find.Boost没有在帐户配置

当执行以下操作,

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至极似乎是静态的,多线程版本关闭磁带库。我究竟做错了什么 ?

回答

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