que nestle library libboost drink bibliotecas c++ boost

c++ - nestle - referencia indefinida para boost:: system:: system_category() al compilar



install boost ubuntu (9)

... y en caso de que desee vincular su principal estáticamente, en su Jamfile agregue lo siguiente a los requisitos:

<link>static <library>/boost/system//boost_system

y quizás también:

<linkflags>-static-libgcc <linkflags>-static-libstdc++

Estoy intentando compilar un programa en Ubuntu 11.10 que usa las bibliotecas de Boost. Tengo las bibliotecas 1.46-dev Boost del Depósito de Ubuntu instaladas, pero aparece un error al compilar el programa.

undefined reference to boost::system::system_category()

¿Qué es lo que hago mal?


Cuando tuve esto, problema, la causa fue el orden de las bibliotecas. Para solucionarlo, puse libboost_system último:

g++ mingw/timer1.o -o mingw/timer1.exe -L/usr/local/boost_1_61_0/stage/lib / -lboost_timer-mgw53-mt-1_61 / -lboost_chrono-mgw53-mt-1_61 / -lboost_system-mgw53-mt-1_61

Esto estaba en mingw con gcc 5.3 y boost 1.61.0 con un simple ejemplo de temporizador.


Cuando use CMAKE y find_package, asegúrese de que sea:

find_package(Boost COMPONENTS system ...)

y no

find_package(boost COMPONENTS system ...)

Algunas personas pueden haber perdido horas por eso ...


El enlace con una biblioteca que define el símbolo que falta ( -lboost_system ) es la solución obvia, pero en el caso particular de Boost.System, una mala característica en el diseño original hace que use boost::system::generic_category() y boost::system::system_category() innecesariamente. La -DBOOST_SYSTEM_NO_DEPRECATED con el indicador -DBOOST_SYSTEM_NO_DEPRECATED deshabilita ese código y permite que un número de programas compile sin requerir -lboost_system (ese enlace por supuesto sigue siendo necesario si usted explícitamente utiliza algunas de las características de la biblioteca).

A partir de Boost 1.66 y este compromiso , este comportamiento ahora es el predeterminado, por lo que es de esperar que cada vez menos usuarios necesiten esta respuesta.

Como notó @AndrewMarshall, una alternativa es definir BOOST_ERROR_CODE_HEADER_ONLY que habilita una versión de solo cabecera del código. Sin embargo, Boost lo discouraged porque puede romper algunas funcionalidades.



La biblioteca de impulso que está utilizando depende de la biblioteca boost_system. (No todos lo hacen.)

Suponiendo que usa gcc, intente agregar -lboost_system a la línea de comandos del compilador para enlazar con esa biblioteca.


Otra solución para aquellos que no necesitan todo el shebang: use el interruptor

-DBOOST_ERROR_CODE_HEADER_ONLY .

Si usa CMake, es add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY) .


Tengo el mismo problema:

g++ -mconsole -Wl,--export-all-symbols -LC:/Programme/CPP-Entwicklung/MinGW-4.5.2/lib -LD:/bfs_ENTW_deb/lib -static-libgcc -static-libstdc++ -LC:/Programme/CPP-Entwicklung/boost_1_47_0/stage/lib / D:/bfs_ENTW_deb/obj/test/main_filesystem.obj / -o D:/bfs_ENTW_deb/bin/filesystem.exe -lboost_system-mgw45-mt-1_47 -lboost_filesystem-mgw45-mt-1_47

D: /bfs_ENTW_deb/obj/test/main_filesystem.obj: main_filesystem.cpp :(. Text + 0x54): referencia no definida a `boost :: system :: generic_category ()

La solución fue usar la versión de depuración del sistema-lib:

g++ -mconsole -Wl,--export-all-symbols -LC:/Programme/CPP-Entwicklung/MinGW-4.5.2/lib -LD:/bfs_ENTW_deb/lib -static-libgcc -static-libstdc++ -LC:/Programme/CPP-Entwicklung/boost_1_47_0/stage/lib / D:/bfs_ENTW_deb/obj/test/main_filesystem.obj / -o D:/bfs_ENTW_deb/bin/filesystem.exe -lboost_system-mgw45-mt-d-1_47 -lboost_filesystem-mgw45-mt-1_47

¿Pero por qué?