1

我已经安装

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

他们必须重命名吗?

4

2 回答 2

2

这似乎可以解决问题:

$sudo ln -s libboost_program_options.so libboost_program_options-mt.so
$sudo ln -s libboost_iostreams.so libboost_iostreams-mt.so
于 2013-02-22T22:53:13.907 回答
1

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

bjam --layout=tagged 

你甚至可以拿回你的足够的东西......从技术上讲,你的解决方案也是完全有效的:)

于 2013-02-23T00:46:35.943 回答