C++ Boost: referencia indefinida a boost:: system:: categoría genérica()


Estoy tratando de incluir Boost bibliotecas en mi proyecto y he estado enfrentando problemas en el mismo. Estoy en Ubuntu 12.10 con Codeblocks IDE e intenté instalar las bibliotecas leyendo manualmente las instrucciones del sitio, pero estaba obteniendo errores con el encabezado, así como bibliotecas 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 intento incluir el encabezado para el Biblioteca del Sistema de archivos (#include "boost/filesystem/operations.hpp"), estoy recibiendo 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). Me vendría bien algo de ayuda.

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

Construir registro desde 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
Author: Cipher, 2012-11-20

8 answers

Deberías enlazar en la biblioteca libboost_system. No estoy seguro sobre los codeblocks, pero la opción de línea de comandos de g++ en su plataforma sería

- lboost_system

 117
Author: juanchopanza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-20 07:17:37

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

Así que si -lboost_system no puede ser encontrado por el enlazador intente -lboost_system-mt.

 19
Author: tssch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-02 08:07:23

Es un problema de enlazador. Incluya la ruta de la 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, abre la pestaña de configuración Settings->Compiler...->Linker y agrega:

boost_system

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

 8
Author: GLR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-02 23:38:38

También busqué una solución, y ninguna de las respuestas que encontré resolvió el error, Hasta que encontré la respuesta de "Virustrinidad" a este hilo: Referencia indefinida 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})
 4
Author: SubMachine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:24

Podrías encontrarte con otro problema. Después de instalar Boost en Linux Mint he tenido el mismo problema. Enlazar -lboost_system o -lboost_system-mt no ha funcionado porque la biblioteca ha tenido nombre libboost_system.so.1.54.0.

Así que 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 ver esta pregunta.

 1
Author: nuduoz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:54

Tuve el mismo problema y también uso Linux Mint (como nuduoz) . I mi problema de caso se resolvió después de agregar boost_system a GCC C++ Linker->Libraries.

 1
Author: piotr93,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-26 10:11:57

El mismo problema en la construcción de un ejemplo de boost simple, resuelto después de cambiar la bandera del compilador de g++ de -std=c++14 a -std=c++11.

Y me di cuenta de que es un ejemplo de C++11...

 1
Author: Halowb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-16 15:10:56

Intenta

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 boost

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

 0
Author: algometrix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-02 22:38:22