2012-06-28 7 views
16

Я искал высоко и низко для ответа на эту проблему. Я использую boost 1.48, и программа чрезвычайно проста, так как я разбил ее на самую простую форму, чтобы решить эту проблему.g ++ undefined ссылка на `boost :: system :: system_category() '

#include <boost/filesystem.hpp> 

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

Г ++ команда, выполненная из моего Makefile выглядит следующим образом:

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

Полный список ошибок в процессе подключения выглядит следующим образом:

/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 

Я нашел много людей, страдающих от та же проблема, но в большинстве случаев решение заключалось в предоставлении библиотеки boost_system в LDFLAGS. Как вы можете видеть из командной строки g ++, я уже указал это. Я даже попытался явно связать библиотеку libboost_system.a безрезультатно. Я единственный человек с этой жалобой?

ответ

27

Поместите исходный файл в начале командной строки.

Попробуйте

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

библиотеки должна быть указана только после того, как исходного файла, так что компоновщик может разрешить неопределенные ссылки в исходном файле.

Смежные вопросы