找不到 Boost(缺少:系统)(在 "1.78.0" 上找到合适的 versihow,最低要求为 "1.78.0" )



如何使用cmake运行boost asio?Havint这个简单的项目布局:

c1
├── c1
│   └── main.cpp
└── CMakeLists.txt

CMakeLists.txt:

cmake_minimum_required(VERSION 3.20.0)
project(c1)
add_executable(c1 c1/main.cpp)
include_directories(.)
set(BOOST_ROOT /usr/local/boost_1_78_0)
find_package(Boost 1.78.0 REQUIRED COMPONENTS system)
target_include_directories(c1 PUBLIC ${Boost_INCLUDE_DIR})
target_link_libraries(c1 LINK_PUBLIC ${Boost_LIBRARIES})

main.cpp:

#include <iostream>
#include <boost/asio.hpp>
int main(){
boost::asio::io_context io;
boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));
t.wait();
std::cout << "Hello world!" << std::endl;
}

我得到这个cmake错误:

CMake Error at /usr/local/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Boost (missing: system) (found suitable version "1.78.0",
minimum required is "1.78.0")
Call Stack (most recent call first):
/usr/local/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)
CMakeLists.txt:8 (find_package)

我不确定我是否正确理解它,但它正在试图找到合适的版本1.78.0,但它找到了1.78.0,那么问题是什么?

同样在此之前,有一个警告:

CMake Warning at /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:1369 (message):
New Boost version may have incorrect or missing dependencies and imported
targets
Call Stack (most recent call first):
/usr/local/share/cmake-3.22/Modules/FindBoost.cmake:1492 (_Boost_COMPONENT_DEPENDENCIES)
/usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2102 (_Boost_MISSING_DEPENDENCIES)
CMakeLists.txt:8 (find_package)

那么我该怎么办呢?

编辑:系统库位于:

/usr/local/boost_1_78_0/boost/system

以及cmake查找位置的调试输出:

-- [ /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2053 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = "/usr/local/boost_1_78_0/lib;/usr/local/boost_1_78_0/stage/lib;/usr/local/boost_1_78_0/lib;/usr/local/boost_1_78_0/../lib;/usr/local/boost_1_78_0/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib"
-- [ /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2054 ] _boost_LIBRARY_SEARCH_DIRS_DEBUG = "/usr/local/boost_1_78_0/lib;/usr/local/boost_1_78_0/stage/lib;/usr/local/boost_1_78_0/lib;/usr/local/boost_1_78_0/../lib;/usr/local/boost_1_78_0/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib"
-- [ /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2239 ] Searching for SYSTEM_LIBRARY_RELEASE: boost_system-gcc10-mt-1_78;boost_system-gcc10-mt;boost_system-gcc10-mt;boost_system-mt-1_78;boost_system-mt;boost_system-mt;boost_system-mt;boost_system
-- [ /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2294 ] Searching for SYSTEM_LIBRARY_DEBUG: boost_system-gcc10-mt-d-1_78;boost_system-gcc10-mt-d;boost_system-gcc10-mt-d;boost_system-mt-d-1_78;boost_system-mt-d;boost_system-mt-d;boost_system-mt;boost_system

但是我不明白为什么cmake找不到那个图书馆。

看起来您忘记构建Boost库了。

许多Boost库是,或者可以是,只是头,但许多不是。

我认为CMake FindBoost组件只关心需要构建的库。因此,如果您将system命名为必需的组件,则会告诉CMake需要链接它,并且它会查找已构建的库。

构建的库通常在stage/lib/下,例如

/home/sehe/custom/boost/stage/lib/libboost_system.a
/home/sehe/custom/boost/stage/lib/libboost_system.so
/home/sehe/custom/boost/stage/lib/libboost_system.so.1.78.0

但是,如果您没有构建库,它就会丢失。

请参阅https://www.boost.org/doc/libs/1_78_0/more/getting_started/unix-variants.html

不要浪费时间试图编译Boost,这不是问题所在。

正如Tsyvarev所说,由于版本1.69,如果您仅使用system或任何其他仅限标头的组件(不需要构建(,则必须删除关键字COMPONENT

find_package(Boost 1.80.0 REQUIRED)
# ...Nothing more

最新更新