C++ CMake Find.Boost不考虑配置

C++ CMake Find.Boost不考虑配置,c++,boost,compilation,cmake,C++,Boost,Compilation,Cmake,当尝试使用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_LIBRAR

当尝试使用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
,它似乎是库外的静态多线程版本。我做错了什么?

如果将Boost\u USE\u STATIC\u LIBS指定为OFF,则使用默认后缀值进行搜索(CMAKE\u FIND\u LIBRARY\u后缀),而不是覆盖它们。在我的linux机器上

MESSAGE(${CMAKE_FIND_LIBRARY_SUFFIXES})
返回

.那么,a

所以

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

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

关于多线程,在linux发行版中,不带“-mt”的libs有时只是带“-mt”的libs的符号链接,因此如果是这种情况,将Boost\u USE\u MULTITHREADED设置为OFF将导致链接多线程库

cmake -DBoost_DEBUG=ON