Не удалось связать C ++ [undefined reference boost :: filesystem3 ...] - PullRequest
1 голос
/ 25 ноября 2011

У меня проблемы с компиляцией, я использую Ubuntu с g++. Я получаю много таких сообщений:

undefined reference to `boost::filesystem3::directory_entry::m_get_status(boost::system::error_code*) const'
undefined reference to `boost::filesystem3::path::extension() const'
undefined reference to `boost::filesystem3::path::filename() const'
undefined reference to `boost::filesystem3::path::filename() const'

(и т.д. ...)

Я искал и нашел много ответов, но ни один из них не помог мне.

-lboost_system (/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/libboost_system.so)
-lboost_filesystem (/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/libboost_filesystem.so)

При связывании этих двух библиотек, я предполагаю, что ошибка связана со второй.

hax@lap:~$ locate libboost_filesystem.so
/home/hax/boost_1_47_0/bin.v2/libs/filesystem/build/gcc-4.4.5/release/threading-multi/libboost_filesystem.so.1.47.0
/home/hax/boost_1_47_0/stage/lib/libboost_filesystem.so
/home/hax/boost_1_47_0/stage/lib/libboost_filesystem.so.1.47.0
/usr/lib/libboost_filesystem.so
/usr/lib/libboost_filesystem.so.1.42.0
/usr/local/lib/libboost_filesystem.so
/usr/local/lib/libboost_filesystem.so.1.47.0

Это связанная строка в моем make-файле:

-L. -L../bncsutil/src/bncsutil/ -L../StormLib/stormlib/ -L../boost/lib/ -lbncsutil -lpthread -ldl -lz -lStorm -lmysqlclient_r -lboost_date_time -lboost_thread -lboost_system -lboost_filesystem  -Wl -t

Я пытался указывать -L на несколько разных мест, где я видел файл filesystem.so, но он не работал!

Кто-нибудь может увидеть проблему в этих строках? Если вам нужно, чтобы я добавил дополнительные данные, я сделаю это, я не вижу проблемы: (

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Похоже, что он пытается связаться с версией 1.42.0, которая может не содержать эти символы. Вы можете удалить версию 1.42.0, запустить ldconfig и снова попытать счастья.

1 голос
/ 25 ноября 2011

Ник Бетчер прав. Вы смешиваете две версии двоичных файлов boost :: filesystem. По умолчанию Boost 1.42 строится с версией 2 и Boost 1.47 с версией 3.

В качестве альтернативы вы можете определить макрос BOOST_FILESYSTEM_VERSION 2; он отключает функции версии 3 и ошибки компоновщика отклоняются.

...