CentOSのソースから boost 1.54をコンパイルしてインストールしようとしています。
ドキュメントは非常に単純明快で、インターネットにはたくさんのチュートリアルがあります( 1 )( 2 )()。これは私がやったことです:
wget http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.tar.gz
tar -xzvf boost_1_54_0.tar.gz
cd boost_1_54_0
./bootstrap.sh --prefix=/usr/local
./b2 install --with=all
これはboostを/usr/local/lib
に正しくコンパイルおよびインストールしており、すべて正常に見えます。
gcc
を使用してブーストが必要な他のソフトウェアをコンパイルすると、すべてが正常に動作します。私の理解から、gcc
が必要なライブラリを見つける限り、すべてが問題ないはずです。
しかし今問題:コンパイルしたバイナリを実行すると、次のエラーが発生します。
./myProgram
./myProgramm: error while loading shared libraries: libboost_system.so.1.54.0: cannot open shared object file: No such file or directory
ライブラリが見つからないのはなぜですか?
さらに私が試した:
ldconfig
locate boost
[...]
ただし、ブーストライブラリが見つかりません。私は手動でパスを探しました、それは:
/usr/local/lib/libboost_system.so.1.54.0
また、/usr/lib
へのシンボリックリンクを作成しようとしましたが、これでも修正されません。
何か案は?私に何ができる?
追加する必要があります-Wl,-R/usr/local/lib
をプログラムのコンパイル時にLDFLAGS
に変更します。
-R
はリンカーオプションです(実行時リンカーパスを指定するため)--Wl
はgcc
にld
に渡すように指示します。
共有ライブラリを使用する場合は、コンパイル時にリンカーがそれらを見つけられるようにする必要がありますand実行時(cf. flags -L
および-R
)。
使用できます
$ ldd myProgramm
runtime-linkerパスが正しく設定されているかどうか、つまり、プログラムの開始時に必要な共有ライブラリを見つけることができるか、どの共有ライブラリをロードするかを確認します。
回避策として、実行可能ファイルの実行に環境変数LD_LIBRRAY_PATH
をプレフィックスとして付け、.so
ライブラリを含むディレクトリへのパスを与えることができると思います。
$ LD_LIBRARY_PATH=/usr/local/lib ./myProgram
しかし、問題のアプリケーションをコンパイルするために使用した方法が正しくないようです。より具体的にするには、myProgram
のコンパイル方法を確認する必要があります。
以下のコマンドを使用して、CentOS 7にインストールされた1.54バージョンをブーストしました。
Sudo wget http://repo.enetres.net/enetres.repo -O /etc/yum.repos.d/enetres.repo
以下のリンクからlib64icu42-4.2.1-1mdv2010.0.x86_64.rpmをダウンロードします。 ftp://fr2.rpmfind.net/linux/Mandriva/official/2010.0/x86_64/media/main/release/ lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm
RPMをインストールします。
Sudo rpm -ivh lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm
必要なboostライブラリバージョンをインストールします。
Sudo yum install boost-devel-1.54.0
それでおしまい。すてきな一日を!
rpmリンク: https://www.rpmfind.net/linux/rpm2html/search.php?query=libicuuc.so.42()(64bit)