Estoy tratando de incluir Boost
bibliotecas en mi proyecto y he tenido problemas en el mismo. Estoy en Ubuntu 12.10 con Codeblocks IDE e intenté instalar las bibliotecas manualmente leyendo las instrucciones del sitio, pero recibía errores con el encabezado y las bibliotecas que se deben construir antes de usar.
Luego instalé las bibliotecas a través de terminalby sudo apt-get install libboost-all-dev
. Después de esto, en mis programas en Codeblocks, puedo incluir encabezados como, #include <boost/regex.hpp>
pero cuando trato de incluir el encabezado para la biblioteca del sistema de archivos ( #include "boost/filesystem/operations.hpp"
), aparece el siguiente error:
/usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'|
No estoy seguro de cómo resolver este error (específicamente en Codeblocks en Linux). Realmente me vendría bien un poco de ayuda aquí.
Compilador: Gcc
Código de programa: Solo se intentó incluir el archivo del sistema de operations.hpp
archivos anterior.
Crear registro a partir de 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
fuente
-lboost_system
en algún lugar de la configuración, pero no se resolvió. Sin embargo, ni siquiera estoy seguro de si hice todo el asunto del indicador del enlazador en el lugar correcto. Un poco más de detalle sería de gran ayuda.Boost filesystem library
(operation.hpp en la publicación anterior)Respuestas:
Debe vincular en la
libboost_system
biblioteca. No estoy seguro acerca de los bloques de código, pero la opción de línea de comandos g ++ en su plataforma seríafuente
Dependiendo de la versión boost, libboost-system viene con el sufijo -mt que debería indicar la capacidad de múltiples subprocesos de las bibliotecas.
Entonces, si
-lboost_system
el vinculador no puede encontrarlo, intente-lboost_system-mt
.fuente
-mt
sufijo.Es un problema de enlazador. Incluya la ruta de la biblioteca estática en su proyecto.
Para Qt Creator, abra el archivo del proyecto
.pro
y agregue la siguiente línea:LIBS += -L<path for boost libraries in the system> -lboost_system
En mi caso Ubuntu x86_64:
Para Codeblocks, abra la
Settings->Compiler...->Linker
pestaña de configuración y agregue:al widget de texto de bibliotecas de enlaces y presione el OKbotón.
fuente
También busqué una solución, y ninguna de las respuestas que encontré resolvió el error, hasta que encontré la respuesta de "ViRuSTriNiTy" a este hilo: ¿ Referencia no definida para 'boost :: system :: generic_category ()'?
de acuerdo con esa respuesta, intente agregar estas líneas a su archivo 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})
fuente
Esta respuesta realmente ayudó al usar Boost y cmake.
Añadiendo el
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
archivo cmake.Mi CMakeLists.txt se ve así:
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()
fuente
El mismo problema en la construcción de un ejemplo de refuerzo simple, resuelto después de que cambié el indicador del compilador g ++ de -std = c ++ 14 a -std = c ++ 11 .
Y me di cuenta de que es un ejemplo de C ++ 11 ...
fuente
Tuve el mismo problema y también uso Linux Mint (como nuduoz). Mi problema de caso se resolvió después de agregar
boost_system
aGCC C++ Linker->Libraries
.fuente
Podría encontrarse con otro problema. Después de instalar Boost en Linux Mint, tuve el mismo problema. Vinculando
-lboost_system
o-lboost_system-mt
no ha funcionado porque la biblioteca tiene un nombrelibboost_system.so.1.54.0
.Entonces, la solución es crear un enlace simbólico al archivo original. En mi caso
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 /usr/lib/libboost_system.so
Para obtener más información, consulte esta pregunta.
fuente
Si la biblioteca no está instalada, debe dar impulso a la carpeta de bibliotecas:
ejemplo:
fuente
tratar
g++ -c main.cpp && g++ main.o /usr/lib/x86_64-linux-gnu/libboost_system.so && ./a.out
/usr/lib/x86_64-linux-gnu/
es la ubicación de la biblioteca boostutilizar
find /usr/ -name '*boost*.so'
para encontrar la ubicación de la biblioteca de impulsofuente
funcionó perfectamente bajo debian. (boost las bibliotecas de C ++ instaladas con apt-get).
fuente
Después de probar las soluciones propuestas descritas anteriormente, descubrí que solo estas pocas líneas funcionarían.
Estoy usando Ubuntu 16.04.
proyecto cmake_minimum_required (VERSIÓN 3.13)
(myProject)
establecer (CMAKE_CXX_STANDARD 11)
add_executable (myProject main.cpp)
find_package (Boost 1.58.0 REQUIRED COMPONENTS sistema de archivos del sistema)
target_link_libraries (myProject $ {Boost_LIBRARIES})
fuente