Я пытался включить boost в мой проект cmake, и у меня возникли некоторые трудности с компиляцией проекта.В частности, я хотел бы использовать вещи, определенные в заголовке boost/filesystem.hpp
.
Я установил boost, используя apt install libboost-all-dev
, и я попытался внести необходимые изменения в файлы cmake в нужных местах, как рекомендовано в нескольких сообщениях на этом сайте.Тем не менее, следующий CMakeLists.txt
файл не работает для меня (есть несколько, но это единственный, который должен ссылаться на новые заголовки и библиотеки повышения):
project(run_backtest)
add_subdirectory(markets)
set(SOURCE_FILES main.cpp)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.65.1 COMPONENTS system filesystem)
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
include_directories(${Boost_INCLUDE_DIRS})
link_directories( ${Boost_LIBRARIES})
find_library(mysqlcppconn 1.1.12 REQUIRED)
add_executable(run_backtest ${SOURCE_FILES})
target_link_libraries(run_backtest markets Eigen3::Eigen stdc++fs mysqlcppconn ${Boost_LIBRARIES})
install(TARGETS run_backtest DESTINATION ${MARKETS_INSTALL_BIN_DIR})
Я перехожу в каталогназывается ~/markets/build/manual
и введите cmake ../..
.Похоже, это работает;это распечатывает это:
taylor@taylor-XPS-13-9365:~/markets/build/manual$ cmake ../..
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Boost version: 1.65.1
-- Found the following Boost libraries:
-- system
-- filesystem
/usr/lib/x86_64-linux-gnu/libboost_system.so/usr/lib/x86_64-linux-gnu/libboost_filesystem.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/taylor/markets/build/manual
Тогда make && make install
приводит к некоторым undefined reference to
ошибкам.Вот первая копия / вставка:
../src/markets/libmarkets.a(data_readers.cpp.o): In function `number_of_files_in_directory(boost::filesystem::path)':
data_readers.cpp:(.text+0x28b): undefined reference to `boost::filesystem::detail::directory_iterator_construct(boost::filesystem::directory_iterator&, boost::filesystem::path const&, boost::system::error_code*)'
Верх файла data_readers.h
выглядит следующим образом:
.
.
.
#include <string>
#include <vector>
#include <queue>
#include <boost/filesystem.hpp>
.
.
.
Просмотр cmake docs ,Я заметил, что существует огромное количество переменных, которые дают каталог библиотеки.Возможно, я использую один рабочий?