2012-06-28 11 views
16

He buscado alto y bajo para la respuesta a este problema. Estoy usando boost 1.48 y el programa es extremadamente simple, ya que lo he descompuesto a su forma más simple para resolver este problema.g ++ referencia indefinida a `boost :: system :: system_category() '

#include <boost/filesystem.hpp> 

int main(int argc, char **argv) { 
    return 0; 
} 

g ++ comando ejecutado de mi Makefile es el siguiente:

g++ -m32 -Wall -o mapnik-test -L/usr/lib -I/usr/include -I/usr/include/freetype2 -lpthread -lboost_system mapnik-test.cpp 

La lista completa de errores durante el enlace es el siguiente:

/tmp/ccIbmuee.o: In function `__static_initialization_and_destruction_0(int, int)': 
mapnik-test.cpp:(.text+0x49): undefined reference to `boost::system::generic_category()' 
mapnik-test.cpp:(.text+0x53): undefined reference to `boost::system::generic_category()' 
mapnik-test.cpp:(.text+0x5d): undefined reference to `boost::system::system_category()' 
collect2: ld returned 1 exit status 
make: *** [mapnik-test] Error 1 

he encontrado muchas personas que sufren de el mismo problema, pero en la mayoría de los casos, la solución ha sido proporcionar la biblioteca boost_system en los LDFLAGS. Como puede ver en la línea de comando de g ++, ya tengo esto especificado. Incluso he intentado vincular explícitamente con la biblioteca libboost_system.a en vano. ¿Soy la única persona con esta queja?

Respuesta

27

Coloque el archivo de origen al comienzo de la línea de comando.

Trate

g++ -m32 -Wall mapnik-test.cpp -o mapnik-test -L/usr/lib -I/usr/include -I/usr/include/freetype2 -lpthread -lboost_system 

Las bibliotecas deben especificarse sólo después de que el archivo de origen para que el enlazador puede resolver las referencias no definidas en el archivo de origen.

Cuestiones relacionadas