C++ 链接C+时失败+;[未定义的引用boost::filesystem3…]

C++ 链接C+时失败+;[未定义的引用boost::filesystem3…],c++,boost,reference,undefined,C++,Boost,Reference,Undefined,我在编译我的作品时遇到了一些问题,我正在使用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 `bo

我在编译我的作品时遇到了一些问题,我正在使用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所在的几个不同的地方,但没有成功


有人能看出这些方面的问题吗?如果您需要我输入一些额外数据,我会这样做,我看不出问题:(

看起来它几乎试图链接到可能不包含这些符号的1.42.0版本。您可以删除1.42.0版本,运行ldconfig,然后再次尝试运气。

尼克·贝彻是对的。您混合了两个版本的boost::filesystem二进制文件。默认情况下,boost 1.42使用版本2构建,boost 1.47使用版本2构建三,


或者,您可以定义一个宏BOOST\u FILESYSTEM\u VERSION 2;它会禁用版本3的功能,并消除链接器错误。

组合命令行中-lxxx选项与.o文件的相对位置是什么?我使用的一个编译器要求先决条件应位于对象(libs)的右侧。类似于:g++-o a.out main.o-lbuzz-lbar-lfoo。其他一些编译器需要libs/object文件的相反顺序。尝试更改顺序,看看会发生什么。g++-o[OUTPUT][ALL.o在此]-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-lrt刚刚删除了1.42?还是我必须删除额外的文件?无论如何,我认为这有点相关-->刚刚注意到这一行e big编译日志:“/usr/bin/ld:warning:libboost_system.so.1.42.0,是/usr/lib/gcc/i686 linux gnu/4.4.5/。/../../../../../../../lib/libboost_filesystem.so所需的,未找到(尝试使用-rpath或-rpath链接)”libboost_系统。因此.1.42.0位于/usr/lib/lib/lib上,而不是/usr/bin/ld上(实际上bin中的ld不是文件夹,它是某种二进制文件)。有什么想法吗?我应该创建一个文件夹ld并将该文件复制到其中吗?听起来不太对。从发行版中删除Boost库安装或升级它们。你为什么要手动编译Boost?我不记得我是如何安装Boost的,我想我是通过apt get安装的。有没有简单的方法删除所有Boost库s文件?我会做一个apt get remove libboost*。但是因为我显然有两个版本…oooo kay我做了一个apt get remove libboost*,以防万一,我尝试编译,但没有错误!发生了什么?!编译作业试图链接到系统上安装的1.42.0版本。删除1.42.0系统安装修复了错误问题,因为它们不再有链接。别忘了标记为答案。;)