2011-11-25 180 views
1

我在编译我的工作时遇到了一些麻烦,我使用的是Ubuntu的g++。我得到了很多这些消息:链接C++失败[未定义的引用boost :: filesystem3 ...]

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) 

当连接它显示这两个库时,我猜错误是与第二个有关。

[email protected]:~$ 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

瓦。 at是-lxxxxx选项与组合命令行中的.o文件的相对位置?我使用的编译器之一要求先决条件应该在对象(库)的右侧。例如:g ++ -o a.out main.o -lbuzz -lbar -lfoo。其他一些编译器需要libs/object文件的相反顺序。尝试改变顺序,看看会发生什么。 –

+0

g ++ -o [OUTPUT] [ALL .O HERE] -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 – nitrnitr

回答

2

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

+0

只需删除1.42的.so?或者我必须删除额外的文件?无论如何,我认为这有点相关---> 刚刚在大编译日志中注意到这一行: “/ 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-link)“ libboost_system.so .1.42.0位于/ usr/lib而不是/ usr/bin/ld(实际上,bin中的ld不是文件夹,它是某种二进制文件)。 有关于此的任何想法?我应该创建一个文件夹ld并将其复制到里面吗?听起来不太合适 – nitrnitr

+0

从发行版安装中删除Boost库或升级它们。为什么你用手编写Boost? –

+0

我不记得我是如何安装Boost的,我想我是通过apt-get安装的。 有没有简单的方法来删除它的所有文件?我会做一个apt-get删除libboost *。但因为我显然有两个版本... – nitrnitr

1

Nick Betcher是对的你正在混合使用boost :: filesystem二进制文件的两个版本默认情况下,boost 1.42使用版本2和boost 1.47与版本3

或者,也可以定义一个宏BOOST_FILESYSTEM_VERSION 2;它禁用的版本3的特征和链接器错误驳回

相关问题