找不到-lboost_system的库

时间:2011-07-17 02:27:03

标签: c++ boost makefile boost-asio

我使用macports安装了boost。这些文件似乎位于/ opt / local / include / boost /

我的makefile不再有效,我收到以下错误

Undefined symbols:
"boost::system::generic_category()", referenced from:
  __static_initialization_and_destruction_0(int, int)in client.o
  __static_initialization_and_destruction_0(int, int)in client.o
"boost::system::system_category()", referenced from:
  boost::asio::error::get_system_category()    in client.o
  boost::system::error_code::error_code()in client.o
  __static_initialization_and_destruction_0(int, int)in client.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [client] Error 1

在学校,解决方案是使用-lboost_system作为g ++的参数,但是现在我把项目带回了我的mac,这不起作用。我认为这主要是因为在学校,升级文件位于usr / local / lib(或类似的地方)。

当我添加-lboost_system参数时,我收到以下消息

g++ -I/opt/local/include -lboost_system -o client client.o Packet.o
ld: library not found for -lboost_system
collect2: ld returned 1 exit status
make: *** [client] Error 1

我尝试过使用-L和-l的一些变体,但我似乎无法找到一个有效的组合。在学校我也不必使用-L。我在这里读了一些关于类似问题的其他帖子,但是他们通过添加-l标志来修复它,这对我来说并不适用。

帮助!谢谢!

2 个答案:

答案 0 :(得分:13)

你错过了-L/opt/local/lib。您应该能够在Makefile中设置LDFLAGS

LDFLAGS=-L/opt/local/lib

这假设Boost库当然在/opt/local/lib

如果您没有在Makefile中使用通常的CXXFLAGSLDFLAGS变量,请在最终规则中直接添加-L/opt/local/lib

client: client.o Packet.o
    g++ -L/opt/local/lib -o client client.o Packet.o -lboost_system

-I只告诉编译器头文件的位置,链接器需要库,并为此使用-L

答案 1 :(得分:1)

您可以尝试在系统中查找:

/sbin/ldconfig -p | grep boost_system | cut -d\> -f2

如果安装了库,那么它应该显示如下:

/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0

或它只显示一个空行

在你的情况下似乎boost安装在另一个地方,因此需要额外的链接器信息,因此需要-L开关,如果你在/ usr / lib中有它,因为我没有必要有关makefile中的其他信息