我已经安装了
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
是否必须重命名?
答案 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
你甚至可以回来......从技术上讲,你的解决方案也完全有效:)