C++ Boost: неопределенная ссылка на boost:: system::generic category()



Я пытаюсь включить Boost библиотеки в моем проекте и сталкиваются с проблемами в том же. Я нахожусь на Ubuntu 12.10 с CodeBlocks IDE и попытался установить библиотеки вручную, читая инструкции с сайта, но получал ошибки с заголовком, а также с библиотеками, которые будут построены перед использованием.

затем я установил библиотеки через terminalby sudo apt-get install libboost-all-dev. После этого в моих программах на Codeblocks я могу включать заголовки типа #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
Программный код: только пробовал inlcuding выше файловой системы .

Build log from Codeblocks:

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
276   8  

8 ответов:

вы должны связать в libboost_system библиотека. Я не уверен в кодовых блоках, но опция командной строки g++ на вашей платформе будет

- lboost_system

в зависимости от версии boost libboost-system поставляется с суффиксом-mt, который должен указывать на возможность многопоточности библиотек.

Если -lboost_system не может быть найден компоновщиком try -lboost_system-mt.

это проблема линкера. Включите путь статической библиотеки в свой проект.

для Qt Creator откройте файл проекта .pro и добавить следующую строку:

LIBS += -L<path for boost libraries in the system> -lboost_system

в моем случае Ubuntu x86_64 с:

LIBS += -L/usr/lib/x86_64-linux-gnu -lboost_system

для кодовых блоков, откройте Settings->Compiler...->Linker вкладка настройки и добавить:

boost_system

к текстовому виджету библиотеки ссылок и нажмите ОК.

Я также искал решение, и ни один из ответов, с которыми я столкнулся, не разрешил ошибку, пока не нашел ответ "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 на 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

для получения дополнительной информации см. этой вопрос.

у меня была та же проблема, а также использовать Linux Mint (как nuduoz) . Я моя проблема была решена после того, как я добавил boost_system до GCC C++ Linker->Libraries.

та же проблема при построении простого примера boost, решена после того, как я изменил флаг компилятора g++ с - std=c++14 до - std=c++11.

и я заметил, что это пример C++11...

попробовать

g++ -c main.cpp && g++ main.o /usr/lib/x86_64-linux-gnu/libboost_system.so && ./a.out 

/usr/lib/x86_64-linux-gnu/ это расположение библиотеки boost

использовать find /usr/ -name '*boost*.so' чтобы найти расположение библиотеки boost

    Ничего не найдено.

Добавить ответ:
Отменить.