【问题标题】:Compiling C++ code with boost library使用 boost 库编译 C++ 代码
【发布时间】:2015-01-12 05:39:22
【问题描述】:

所以我按如下方式安装了boost库

cd /usr/local/
sudo tar --bzip2 -xf ~/Downloads/boost_1_52_0.tar.bz2
sudo ./bootsrap.sh
sudo ./b2 install

现在,我想编译一个使用 boost 库的代码,makefile 有这两行来标识 boost 的位置:(INC=.. and BOOSTLIB=..)

OBJS = utility.o PtDebug.o
CC = g++
INC = /usr/local/boost_1_52_0/
BOOSTLIB = /usr/local/include/boost/
CFLAGS = -Werror -g


all: my_program

在makefile中链接到boos的示例行是

$(CC) $(FLAGS) $(OBJS)  ipMT.o -o ipmt -L$(BOOSTLIB) -lboost_date_time -lboost_thread

但是当我尝试制作时,它会失败并出现以下错误:

g++  -Werror -g utility.o PtDebug.o  ratioWeightedCombIP.o -o rwcip -L/usr/local/include/boost/ -lboost_date_time -lboost_thread
/usr/bin/ld: utility.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
//usr/local/lib/libboost_system.so.1.57.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [misp] Error 1

【问题讨论】:

  • 你需要链接 boost_system
  • @Bot 不,它当然不应该迁移到超级用户。这种类型的问题对 SO 完全有效。

标签: c++ boost makefile


【解决方案1】:

你快到了。添加

-lboost_system

到您的链接行以产生(现在带有缩进)

$(CC) $(FLAGS) $(OBJS)  ipMT.o -o ipmt \
  -L$(BOOSTLIB) -lboost_date_time -lboost_thread -lboost_system

错误信息给了你一个提示:没有符号'_ZN5boost6system15system_categoryEv'表示

  1. 该符号来自 Boost System 命名空间,因此建议您需要链接它,并且
  2. 通过c++filt 等工具提供提示

如果您有 c++filt,您可以看到已扩展的损坏标识符:

edd@max:~$ c++filt _ZN5boost6system15system_categoryEv
boost::system::system_category()
edd@max:~$ 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2011-04-25
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多