我在编译工作时遇到了一些麻烦,我正在使用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
这是我的makefile上的相关行:
-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,但它没有用!
有人能看到这些问题吗?如果你需要我提供一些额外的数据我会这样做,我没有看到问题:(
答案 0 :(得分:2)
它几乎看起来像是试图链接到可能不包含这些符号的1.42.0版本。您可以删除1.42.0版本,运行ldconfig,然后再试一次运气。
答案 1 :(得分:1)
Nick Betcher是对的。您正在混合两个版本的boost :: filesystem二进制文件。默认情况下,boost 1.42正在构建版本2,Boost 1.47正在构建版本3.
或者你可以定义一个宏BOOST_FILESYSTEM_VERSION 2;它禁用版本3的功能,并且链接器错误消失。