Вопрос по linker, boost, compiler-errors, g++ – g ++ неопределенная ссылка на `boost :: system :: system_category () '

16

Я искал высокий и низкий ответ на этот вопрос. Я использую Boost 1.48, и программа очень проста, так как я разбил ее до самой простой формы, чтобы решить эту проблему.

#include <boost/filesystem.hpp>

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

Команда g ++, выполненная из моего 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 безрезультатно. Я единственный человек с этой жалобой?

Ваш Ответ

1   ответ
27

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

Пытаться

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

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

Похожие вопросы