2012-12-13 82 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會導致鏈接多線程庫。