2013-02-21 75 views
1

我已经安装了建立使用Boost项目与ArchLinux的

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

与ArchLinux的下吃豆子。我正在尝试构建使用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 

他们是否要改名?

+0

尝试的搜索中,希望* -mt文件!也许它是硬编码的? – uzsolt 2013-02-23 20:23:32

回答

2

这似乎这样的伎俩:用于与就足够显示他们所建立的架构被称为

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

Boost库。例如,-mt表示“多线程”或“以线程感知模式构建”。据我所知,现在Linux上没有遵循这个约定,并且库默认没有这个后缀(尽管它们仍然以线程感知模式构建)。您的./configure脚本为旧格式的链接器生成说明。尝试使用bjam,如果可以的话。如果你说

bjam --layout=tagged 

你甚至可以得到你的就足够了回来......从技术上讲,你的解决方案是完全有效的,以及:)在配置脚本

+0

谢谢,但这是切换整个构建系统的一大步,我不是唯一的开发者。有稳定的autotools解决方案吗? – joachim 2013-02-23 17:51:37