Ошибка связи с примером Boost Log 1.65.0 от Boost.org - PullRequest
0 голосов
/ 31 октября 2018

Я попытался построить этот пример и получил ошибку связи:

hekto@ubuntu:~$ g++ -g -Wall -std=c++11 -pthread -DBOOST_LOG_DYN_LINK  -pthread sample.cpp -o sample -lboost_log -lboost_thread -lboost_system
/tmp/cc2EUizv.o: In function `boost::log::v2_mt_posix::basic_formatter<char> boost::log::v2_mt_posix::parse_formatter<char>(char const*)':
/usr/include/boost/log/utility/setup/formatter_parser.hpp:207: undefined reference to `boost::log::v2_mt_posix::basic_formatter<char> boost::log::v2_mt_posix::parse_formatter<char>(char const*, char const*)'
collect2: error: ld returned 1 exit status

Как это преодолеть?

1 Ответ

0 голосов
/ 01 ноября 2018

Я отвечаю на свой вопрос, следуя подсказкам и предложениям @Praetorian.

Boost Log опирается на две библиотеки (я думал, что это была только одна):

hekto@ubuntu:~$ ls -l /usr/lib/x86_64-linux-gnu/libboost_log*
-rw-r--r-- 1 root root 3510082 Mar  6  2018 /usr/lib/x86_64-linux-gnu/libboost_log.a
-rw-r--r-- 1 root root 2441460 Mar  6  2018 /usr/lib/x86_64-linux-gnu/libboost_log_setup.a
lrwxrwxrwx 1 root root      28 Mar  6  2018 /usr/lib/x86_64-linux-gnu/libboost_log_setup.so -> libboost_log_setup.so.1.65.1
-rw-r--r-- 1 root root  671944 Mar  6  2018 /usr/lib/x86_64-linux-gnu/libboost_log_setup.so.1.65.1
lrwxrwxrwx 1 root root      22 Mar  6  2018 /usr/lib/x86_64-linux-gnu/libboost_log.so -> libboost_log.so.1.65.1
-rw-r--r-- 1 root root  905752 Mar  6  2018 /usr/lib/x86_64-linux-gnu/libboost_log.so.1.65.1

Если вы компилируете и ссылаетесь на Linux, вам нужно будет предоставить список библиотек Boost в командной строке. Согласно ответу на этот вопрос, заданный главным разработчиком (@AndreySemashev) Boost Log, эти библиотеки в командной строке должны выглядеть следующим образом:

-lboost_log_setup -lboost_log

Возможно, имеет смысл предоставить две библиотеки вместо одной (например, когда вы статически связываете), но я не смог найти никаких рекомендаций относительно того, когда нам следует использовать одну библиотеку, а когда - обе.

...