使用带有ArchLinux的Boost构建项目

时间:2013-02-21 22:39:35

标签: boost linker autotools archlinux

我已经安装了

extra/boost 1.52.0-1
extra/boost-libs 1.52.0-1

在ArchLinux下使用pacman。我正在尝试构建使用Boost库部分的autotools C ++项目。它们已在Ubuntu 12.04下成功测试和构建。安装了libboost-all-dev包。使用ArchLinux ./configure工作正常,编译过程(make)似乎也可以工作。然而,链接似乎存在问题:

 libtool: link: g++ -g -O2 -Wall -Wextra -o ssbmc smtparser.o ... 
 ../contrib/cudd 2.4.2/obj/.libs/libobj.a ... 
 -lboost_program_options-mt -lboost_iostreams-mt -lgmp -lgmpxx -lm -lz
 /usr/bin/ld: cannot find -lboost_program_options-mt
 /usr/bin/ld: cannot find -lboost_iostreams-mt

任何想法失败的原因?标题似乎在那里,因为源使用Boost库函数并且编译文件不会失败。

图书馆在那里:

$ ls /usr/lib/ | grep program
libboost_program_options.a
libboost_program_options.so
libboost_program_options.so.1.52.0
$ ls /usr/lib/ | grep iostreams
libboost_iostreams.a
libboost_iostreams.so
libboost_iostreams.so.1.52.0

是否必须重命名?

2 个答案:

答案 0 :(得分:2)

这似乎可以解决问题:

$sudo ln -s libboost_program_options.so libboost_program_options-mt.so
$sudo ln -s libboost_iostreams.so libboost_iostreams-mt.so

答案 1 :(得分:1)

过去调用的Boost库足以显示它们构建的体系结构。例如,-mt表示“多线程”或“构建线程感知模式”。据我所知,现在Linux上并未遵循此约定,默认情况下库没有该后缀(尽管它们仍然以线程感知模式构建)。 ./configure脚本以旧格式生成链接器的说明。如果可以,尝试使用bjam。如果你说

bjam --layout=tagged 

你甚至可以回来......从技术上讲,你的解决方案也完全有效:)