gpt4 book ai didi

c++ - CMake Find.Boost 不考虑配置

转载 作者:太空狗 更新时间:2023-10-29 21:25:30 27 4
gpt4 key购买 nike

当尝试使用 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 这似乎是图书馆的静态和多线程版本。我做错了什么?

最佳答案

如果你看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”的库的符号链接(symbolic link),因此如果是这种情况,将 Boost_USE_MULTITHREADED 设置为 OFF 将导致链接多线程库。

关于c++ - CMake Find.Boost 不考虑配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13865184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com