c++ linux boost codeblocks

C++ Boost: referencia no definida para boost:: system:: generic_category()



linux codeblocks (7)

Busqué una solución también, y ninguna de las respuestas que encontré resolvió el error, hasta que encontré la respuesta de "ViRuSTriNidAd" a este hilo: ¿ Referencia no definida a ''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})

Estoy tratando de incluir bibliotecas de Boost en mi proyecto y he tenido problemas en el mismo. Estoy en Ubuntu 12.10 con Codeblocks IDE e intenté instalar las bibliotecas de forma manual leyendo las instrucciones del sitio, pero estaba obteniendo errores tanto con las bibliotecas de encabezado como con las que se construirán 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 Filesystem ( #include "boost/filesystem/operations.hpp" ), recibo 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 podría usar algo de ayuda aquí.

Compilador: Gcc
Código de programa: Solo intenté incluir el archivo anterior del sistema de archivos operations.hpp .

Crear registro 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


Debería enlazar en la biblioteca libboost_system . No estoy seguro acerca de los bloques de código, pero la opción de línea de comandos g ++ en su plataforma sería

-lboost_system


Dependiendo de la versión de refuerzo, libboost-system viene con el sufijo -mt, que debe indicar la capacidad de multihilo de las bibliotecas.

Entonces, si -lboost_system no puede ser encontrado por el enlazador, pruebe -lboost_system-mt .


Es un problema de engarce. Incluya la ruta de biblioteca estática en su proyecto.

Para Qt Creator abra el archivo de 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:

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

Para Codeblocks, abra Settings->Compiler...->Linker pestaña de configuración del Settings->Compiler...->Linker y agregue:

boost_system

al widget de texto de bibliotecas de enlaces y presione el botón OK .


Podrías encontrar otro problema. Después de instalar Boost en Linux Mint tuve el mismo problema. Los enlaces -lboost_system o -lboost_system-mt no han funcionado porque la biblioteca ha tenido el nombre libboost_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 más información, vea this pregunta.


Tuve el mismo problema y también uso Linux Mint (como nuduoz). Mi problema de caso fue resuelto después de que agregué boost_system a GCC C++ Linker->Libraries .


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 de impulso

utilice find /usr/ -name ''*boost*.so'' para encontrar la ubicación de la biblioteca de impulso