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
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
Comments