Неопределенная ссылка повышения несмотря на правильную связь - PullRequest
0 голосов
/ 19 февраля 2019

Я нашел много подобных проблем, но я не смог применить какое-либо решение для меня.Несколько месяцев назад я работал над проектом с использованием библиотеки Boost.Я скомпилировал просто в командной строке, как описано на веб-сайте boost.

g++ -I pathToBoost file.cpp -o file -lboost_system -lboost_filesystem

Были также выполнены две обязательные ссылки на boost_system и boost_filesystem.Это сработало отлично, но теперь внезапно возникает ошибка, когда я пытаюсь скомпилировать ее снова.

/usr/bin/ld: /tmp/ccM2BzEo.o: in function `boost::system::generic_category()':
file.cpp:(.text._ZN5boost6system16generic_categoryEv[_ZN5boost6system16generic_categoryEv]+0x7): 

undefined reference to `boost::system::detail::generic_category_instance'

Что ж, мне кажется, что при подключении библиотеки boost_system произошла ошибка.Поскольку то же самое работало и раньше, возможна ли проблема с компилятором?

Я использовал

Boost 1.68.0
g++ (GCC) 8.2.1
ManjaroLinux 18.0.3

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

Привет!

1 Ответ

0 голосов
/ 19 февраля 2019

Порядок библиотек в командной строке компоновщика важен.boost_filesystem зависит от boost_system, поэтому исправление:

-lboost_filesystem -lboost_system

В качестве альтернативы, вы можете окружить список библиотек --start-group и --end-group, чтобы компоновщик повторно сканировал библиотеки несколько раздо тех пор, пока не произойдет сбой или не будут разрешены все символы, так что никакого особого упорядочения библиотек в командной строке не требуется.Тем не менее, это может занять больше времени для ссылки.Например:

g++ -I pathToBoost file.cpp -o file -Wl,--start-group -lboost_system -lboost_filesystem -Wl,--end-group

Поскольку вы указываете -I pathToBoost, вам также необходимо указать -L<path-to-boost-libs> -Wl,-rpath=<path-to-boost-libs>.В противном случае он использует заголовки из одной версии boost от pathToBoost, но связывает неверные библиотеки с вашей системой boost.

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