コンパイルしてインストールしようとしています。宣伝する1.54 CentOSのソースコード。
ドキュメントは非常にシンプルで、インターネット上で多数のチュートリアルを利用できます(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
このブーストを正しくコンパイルしてインストールすると、/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
問題は解決されませんでした。
どんなアイデアがありますか?どうですか?
答え1
プログラムをコンパイルするときに追加する必要があります-Wl,-R/usr/local/lib
。LDFLAGS
-R
リンカオプション(ランタイムリンカのパスを指定するために使用されます) - に渡すように-Wl
指示します。gcc
ld
共有ライブラリーの場合は、リンカーがコンパイル中にそのライブラリーを見つけるようにする必要があります。そして実行時(フラグ-L
と参照-R
)
あなたはそれを使用することができます
$ ldd myProgramm
ランタイムリンカーパスが正しく設定されていることを確認してください。つまり、必要な共有ライブラリが見つかるかどうか、またはプログラムの起動時にロードする共有ライブラリが何であるかを確認してください。
答え2
回避策として、環境変数を使用して実行可能ファイルの実行の前にプレフィックスを指定し、LD_LIBRRAY_PATH
ライブラリを含むディレクトリへのパスを提供できると思います.so
。
はい
$ LD_LIBRARY_PATH=/usr/local/lib ./myProgram
しかし、問題のアプリケーションをコンパイルするために使用した方法は間違っているようです。より具体的にコンパイル方法を確認する必要がありますmyProgram
。
答え3
CentOS 7 に Boost 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
必要なブーストライブラリのバージョンをインストールします。
sudo yum install boost-devel-1.54.0
それはすべてです。良い一日になろう!
リダイレクトリンク: https://www.rpmfind.net/linux/rpm2html/search.php?query=libicuuc.so.42()(64ビット)