Я пытаюсь включить Boost
библиотеки в свой проект и сталкиваюсь с проблемами в этом же. Я использую Ubuntu 12.10 с IDE Codeblocks и пробовал устанавливать библиотеки вручную, читая инструкции с сайта, но получал ошибку с заголовком, а также с библиотеками, которые должны быть созданы перед использованием.
Затем я установил библиотеки через terminalby sudo apt-get install libboost-all-dev
. После этого в своих программах на кодовых блоках я могу включать такие заголовки, #include <boost/regex.hpp>
но когда я пытаюсь включить заголовок для библиотеки файловой системы ( #include "boost/filesystem/operations.hpp"
), я получаю следующую ошибку:
/usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'|
Я не уверен, как исправить эту ошибку (особенно в кодовых блоках в Linux). Мне действительно нужна помощь здесь.
Компилятор: Gcc
Программный код: Пытался включить только указанный выше файл файловой системы operations.hpp
.
Журнал сборки из кодовых блоков:
Build started on: 20-11-2012 at 18:02.53
Build ended on: 20-11-2012 at 18:02.54
-------------- Build: Debug in libopenFrameworks ---------------
Target is up to date.
-------------- Build: Debug in reader1 ---------------
make -s -f Makefile Debug
linking i686 bin/reader1_debug linux
obj/i686Debug/src/testApp.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
obj/i686Debug/src/main.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [bin/reader1_debug] Error 1
Process terminated with status 2 (0 minutes, 1 seconds)
6 errors, 0 warnings
источник
-lboost_system
в какое-то место в настройках, но он не разрешился. Тем не менее, я даже не уверен, что сделал все, что связано с флагом компоновщика, в нужном месте. Немного подробностей было бы очень полезно.Boost filesystem library
(operation.hpp в вышеуказанный пост)Ответы:
Вы должны сделать ссылку в
libboost_system
библиотеке. Я не уверен насчет кодовых блоков, но параметр командной строки g ++ на вашей платформе будетисточник
В зависимости от версии boost libboost-system поставляется с суффиксом -mt, который должен указывать на возможность многопоточности библиотеки.
Поэтому, если
-lboost_system
компоновщик не может найти его, попробуйте-lboost_system-mt
.источник
-mt
суффикс.Это проблема компоновщика. Включите путь к статической библиотеке в свой проект.
Для Qt Creator откройте файл проекта
.pro
и добавьте следующую строку:LIBS += -L<path for boost libraries in the system> -lboost_system
В моем случае Ubuntu x86_64:
Для кодовых блоков откройте
Settings->Compiler...->Linker
вкладку настроек и добавьте:к текстовому виджету «Связать библиотеки» и нажмите OKкнопку.
источник
Я тоже искал решение, и ни один из ответов, с которыми я столкнулся, не помог устранить ошибку, пока я не нашел ответ «ViRuSTriNiTy» в этом потоке: Неопределенная ссылка на 'boost :: system :: generic_category ()'?
в соответствии с этим ответом попробуйте добавить эти строки в свой файл cmake:
find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem) include_directories(... ${Boost_INCLUDE_DIRS}) link_directories(... ${Boost_LIBRARY_DIRS}) target_link_libraries(... ${Boost_LIBRARIES})
источник
Этот ответ действительно помог при использовании Boost и cmake.
Добавление
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
для файла cmake.Мой CMakeLists.txt выглядит так:
cmake_minimum_required(VERSION 3.12) project(proj) set(CMAKE_CXX_STANDARD 17) set(SHARED_DIR "${CMAKE_SOURCE_DIR}/../shared") set(BOOST_LATEST_DIR "${SHARED_DIR}/boost_1_68_0") set(BOOST_LATEST_BIN_DIR "${BOOST_LATEST_DIR}/stage/lib") set(BOOST_LATEST_INCLUDE_DIR "${BOOST_LATEST_DIR}/boost") set(BOOST_SYSTEM "${BOOST_LATEST_BIN_DIR}/libboost_system.so") set(BOOST_FS "${BOOST_LATEST_BIN_DIR}/libboost_filesystem.so") set(BOOST_THREAD "${BOOST_LATEST_BIN_DIR}/libboost_thread.so") set(HYRISE_SQL_PARSER_DIR "${SHARED_DIR}/hyrise_sql_parser") set(HYRISE_SQL_PARSER_BIN_DIR "${HYRISE_SQL_PARSER_DIR}") set(HYRISE_SQL_PARSER_INCLUDE_DIR "${HYRISE_SQL_PARSER_DIR}/src") set(HYRISE_SQLPARSER "${HYRISE_SQL_PARSER_BIN_DIR}/libsqlparser.so") include_directories(${CMAKE_SOURCE_DIR} ${BOOST_LATEST_INCLUDE_DIR} ${HYRISE_SQL_PARSER_INCLUDE_DIR}) set(BOOST_LIBRARYDIR "/usr/lib/x86_64-linux-gnu/") set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY) find_package(Boost 1.68.0 REQUIRED COMPONENTS system thread filesystem) add_executable(proj main.cpp row/row.cpp row/row.h table/table.cpp table/table.h page/page.cpp page/page.h processor/processor.cpp processor/processor.h engine_instance.cpp engine_instance.h utils.h meta_command.h terminal/terminal.cpp terminal/terminal.h) if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(proj PUBLIC Boost::system Boost::filesystem Boost::thread ${HYRISE_SQLPARSER}) endif()
источник
Та же проблема при создании простого примера ускорения, решенная после того, как я изменил флаг компилятора g ++ с -std = c ++ 14 на -std = c ++ 11 .
И я заметил, что это пример C ++ 11 ...
источник
У меня была такая же проблема, и я тоже использую Linux Mint (как nuduoz). В моем случае проблема была решена после того, как я добавил
boost_system
вGCC C++ Linker->Libraries
.источник
Вы могли столкнуться с другой проблемой. После установки Boost на Linux Mint у меня возникла та же проблема. Связывание
-lboost_system
или-lboost_system-mt
не сработало, потому что у библиотеки было имяlibboost_system.so.1.54.0
.Таким образом, решение состоит в создании символической ссылки на исходный файл. В моем случае
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 /usr/lib/libboost_system.so
Для получения дополнительной информации см. Этот вопрос.
источник
Если библиотека не установлена, вы должны указать папку с библиотеками boost:
пример:
источник
пытаться
g++ -c main.cpp && g++ main.o /usr/lib/x86_64-linux-gnu/libboost_system.so && ./a.out
/usr/lib/x86_64-linux-gnu/
это расположение библиотеки ускоренияиспользуйте,
find /usr/ -name '*boost*.so'
чтобы найти расположение библиотеки ускоренияисточник
отлично работал под debian. (увеличить библиотеки C ++, установленные с помощью apt-get).
источник
После тестирования предложенных решений, описанных выше, я обнаружил, что только эти несколько строк будут работать.
Я использую Ubuntu 16.04.
cmake_minimum_required (ВЕРСИЯ 3.13)
(myProject)
установить (CMAKE_CXX_STANDARD 11)
add_executable (myProject main.cpp)
find_package (системная файловая система Boost 1.58.0 НЕОБХОДИМЫЕ КОМПОНЕНТЫ)
target_link_libraries (myProject $ {Boost_LIBRARIES})
источник