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 に答える