Не удалось найти следующие библиотеки Boost: boost_fiber

Я не знаком с бустом. И я хочу использовать этот класс в boost, например boost :: context :: fiber и boost :: context :: continue. Итак, я скачал последнюю версию boost 1.68. Соберите его с помощью инструкция на официальном сайте.

Сначала запустите bootstrap и сгенерируйте файл b2.

$ ./bootstrap.sh --with-libraries=all --prefix=/usr/local/boost_168_build

Затем запустите его с установкой.

@--:/usr/local/boost_1_68_0$ ./b2 --show-libraries
The following libraries require building:
- atomic
- chrono
- container
- context
- contract
- coroutine
- date_time
- exception
- fiber
- filesystem
- graph
- graph_parallel
- iostreams
- locale
- log
- math
- mpi
- program_options
- python
- random
- regex
- serialization
- signals
- stacktrace
- system
- test
- thread
- timer
- type_erasure
- wave
@--:/usr/local/boost_1_68_0$ sudo ./b2 install

И я создаю проект cmake для создания списка Cmakelist.

cmake_minimum_required(VERSION 3.12)
project(boost_context)

set(Boost_USE_STATIC_LIBS        OFF) # only find static libs
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)

set(CMAKE_CXX_STANDARD 11)

set (BOOST_ROOT
    "/usr/local/boost_1_68_0")
set (BOOST_LIBRARYDIR
    "/usr/local/boost_1_68_0/lib")

find_package( Boost REQUIRED COMPONENTS context fiber)
if (Boost_FOUND)
ADD_DEFINITIONS( "-DHAS_BOOST" )
message(STATUS ${Boost_INCLUDE_DIRS})
#    include_directories(${Boost_INCLUDE_DIRS})
message(STATUS ${Boost_LIBRARIES})
message(STATUS ${BOOST_LIBRARYDIR})
message(STATUS ${Boost_LIBRARIES})
message(STATUS ${Boost_LIBRARIES})
message(STATUS ${Boost_LIBRARIES})
endif ()

add_executable(boost_context main.cpp)

Но когда включаю Boost_USE_STATIC_LIBS cmake сообщит:

/clion-2018.2.5/bin/cmake/linux/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" 
/Other_Project/boost-context
CMake Error at /clion-2018.2.5/bin/cmake/linux/share/cmake-
3.12/Modules/FindBoost.cmake:2048 (message):
Unable to find the requested Boost libraries.

Boost version: 1.68.0

Boost include path: /usr/local/boost_168_build/include

Could not find the following static Boost libraries:

      boost_fiber

Some (but not all) of the required Boost libraries were found.  You may
need to install these additional Boost libraries.  Alternatively, set
BOOST_LIBRARYDIR to the directory containing Boost libraries or 
BOOST_ROOT
  to the location of Boost.
Call Stack (most recent call first):
CMakeLists.txt:15 (find_package)

Выключите Boost_USE_STATIC_LIBS cmake сообщит:

/clion-2018.2.5/bin/cmake/linux/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /Other_Project/boost-context
CMake Error at /clion-2018.2.5/bin/cmake/linux/share/cmake-3.12/Modules/FindBoost.cmake:2048 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.68.0

  Boost include path: /usr/local/boost_168_build/include

  Could not find the following Boost libraries:

          boost_fiber

  Some (but not all) of the required Boost libraries were found.  You may
  need to install these additional Boost libraries.  Alternatively, set
  BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
  to the location of Boost.
Call Stack (most recent call first):
  CMakeLists.txt:15 (find_package)

Наконец, вы знаете, что я действительно запутался, почему я могу это найти ???

@--0:/usr/local/boost_168_build/include/boost/fiber$ pwd
/usr/local/boost_168_build/include/boost/fiber
@--0:/usr/local/boost_168_build/include/boost/fiber$ ls
algo                   condition_variable.hpp  fiber.hpp            hip             pooled_fixedsize_stack.hpp     scheduler.hpp
all.hpp                context.hpp             fixedsize_stack.hpp  mutex.hpp       properties.hpp                 segmented_stack.hpp
barrier.hpp            cuda                    fss.hpp              numa            protected_fixedsize_stack.hpp  timed_mutex.hpp
buffered_channel.hpp   detail                  future               operations.hpp  recursive_mutex.hpp            type.hpp
channel_op_status.hpp  exceptions.hpp          future.hpp           policy.hpp      recursive_timed_mutex.hpp      unbuffered_channel.hpp

Но в lib нет ни волокна, ни продолжения

@--0:/usr/local/boost_168_build/lib$ pwd
/usr/local/boost_168_build/lib
@--0:/usr/local/boost_168_build/lib$ ls
libboost_atomic.a              libboost_iostreams.so         libboost_numpy27.a                       libboost_stacktrace_backtrace.so.1.68.0
libboost_atomic.so             libboost_iostreams.so.1.68.0  libboost_numpy27.so                      libboost_stacktrace_basic.a
libboost_atomic.so.1.68.0      libboost_locale.a             libboost_numpy27.so.1.68.0               libboost_stacktrace_basic.so
libboost_chrono.a              libboost_locale.so            libboost_prg_exec_monitor.a              libboost_stacktrace_basic.so.1.68.0
libboost_chrono.so             libboost_locale.so.1.68.0     libboost_prg_exec_monitor.so             libboost_stacktrace_noop.a
libboost_chrono.so.1.68.0      libboost_log.a                libboost_prg_exec_monitor.so.1.68.0      libboost_stacktrace_noop.so
libboost_container.a           libboost_log_setup.a          libboost_program_options.a               libboost_stacktrace_noop.so.1.68.0
libboost_container.so          libboost_log_setup.so         libboost_program_options.so              libboost_system.a
libboost_container.so.1.68.0   libboost_log_setup.so.1.68.0  libboost_program_options.so.1.68.0       libboost_system.so
libboost_context.a             libboost_log.so               libboost_python27.a                      libboost_system.so.1.68.0
libboost_context.so            libboost_log.so.1.68.0        libboost_python27.so                     libboost_test_exec_monitor.a
libboost_context.so.1.68.0     libboost_math_c99.a           libboost_python27.so.1.68.0              libboost_thread.a
libboost_contract.a            libboost_math_c99f.a          libboost_random.a                        libboost_thread.so
libboost_contract.so           libboost_math_c99f.so         libboost_random.so                       libboost_thread.so.1.68.0
libboost_contract.so.1.68.0    libboost_math_c99f.so.1.68.0  libboost_random.so.1.68.0                libboost_timer.a
libboost_coroutine.a           libboost_math_c99l.a          libboost_regex.a                         libboost_timer.so
libboost_coroutine.so          libboost_math_c99l.so         libboost_regex.so                        libboost_timer.so.1.68.0
libboost_coroutine.so.1.68.0   libboost_math_c99l.so.1.68.0  libboost_regex.so.1.68.0                 libboost_type_erasure.a
libboost_date_time.a           libboost_math_c99.so          libboost_serialization.a                 libboost_type_erasure.so
libboost_date_time.so          libboost_math_c99.so.1.68.0   libboost_serialization.so                libboost_type_erasure.so.1.68.0
libboost_date_time.so.1.68.0   libboost_math_tr1.a           libboost_serialization.so.1.68.0         libboost_unit_test_framework.a
libboost_exception.a           libboost_math_tr1f.a          libboost_signals.a                       libboost_unit_test_framework.so
libboost_filesystem.a          libboost_math_tr1f.so         libboost_signals.so                      libboost_unit_test_framework.so.1.68.0
libboost_filesystem.so         libboost_math_tr1f.so.1.68.0  libboost_signals.so.1.68.0               libboost_wave.a
libboost_filesystem.so.1.68.0  libboost_math_tr1l.a          libboost_stacktrace_addr2line.a          libboost_wave.so
libboost_graph.a               libboost_math_tr1l.so         libboost_stacktrace_addr2line.so         libboost_wave.so.1.68.0
libboost_graph.so              libboost_math_tr1l.so.1.68.0  libboost_stacktrace_addr2line.so.1.68.0  libboost_wserialization.a
libboost_graph.so.1.68.0       libboost_math_tr1.so          libboost_stacktrace_backtrace.a          libboost_wserialization.so
libboost_iostreams.a           libboost_math_tr1.so.1.68.0   libboost_stacktrace_backtrace.so         libboost_wserialization.so.1.68.0

Может ли кто-нибудь сказать мне, где я пропустил. Спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
2 065
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

fiber - это библиотека только для заголовков, поэтому нечего связывать и не нужно добавлять ее в качестве компонента для поиска.

Список скомпилированных библиотек находится в документе: https://www.boost.org/doc/libs/1_68_0/more/getting_started/unix-variants.html#header-only-libraries

Как видите, я тоже думаю, что волокно включено, но почему cmake find_package( Boost REQUIRED COMPONENTS fiber) не может его найти?

EricLu 25.10.2018 12:48

Потому что часть component ищет библиотеку. Что не удается. По определению, если вы запрашиваете версию с заголовками оптоволокна, она доступна, вам не нужно ее искать.

Matthieu Brucher 25.10.2018 12:49

Я пытаюсь скомпилировать проект boost_context и добавить include_directories(${Boost_INCLUDE_DIRS}) и target_link_libraries(boost_context ${BOOST_LIBRARYDIR}) Результат компиляции - undefined reference to jump_fcontext '' collect2: error: ld returned 1 exit status

EricLu 25.10.2018 12:58

Спасибо, я понял, я пропустил target_link_libraries(boost_context Boost::context)

EricLu 25.10.2018 13:07

К вашему сведению, это могло иметь смысл, когда он был изначально написан, но для «современного» (то есть последних 10 лет) CMake это довольно ужасный дизайн. Нет причин не раскрывать цель, на которую вы можете ссылаться, только потому, что нет бинарной библиотеки, с которой вам нужно ссылаться; Целевые объекты также включают пути и тому подобное.

Cubic 22.01.2020 18:14

Вы можете использовать:

b2 cxxflags = "-std=c++14" --reconfigure --with-fiber

для компиляции libboost_fiber.a

Другие вопросы по теме