UbuntuでEclipseをg ++コンパイラーを使用して実行していて、xercesを利用するサンプルプログラムを実行しようとしています。
ビルドでエラーは発生しませんでしたが、プログラムを実行しようとすると、次のエラーが表示されます。
error while loading shared libraries: libxerces-c-3.1.so: cannot open shared object file: No such file or directory
libxerces-c-3.1.so
は、Eclipseのライブラリーとして組み込んだ/opt/lib
ディレクトリーにあります。フォルダを確認したところ、ファイルがあります。 echo $LD_LIBRARY_PATH
を実行すると、/opt/lib
も表示されます。
問題がどこにあるかについてのアイデアはありますか?ありがとう。
ldd libxerces-c-3.1.so
コマンドは、次の出力を生成します。
linux-vdso.so.1 => (0x00007fffeafff000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00007fa3d2b83000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa3d2966000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fa3d265f000)
libm.so.6 => /lib/libm.so.6 (0x00007fa3d23dc000)
libc.so.6 => /lib/libc.so.6 (0x00007fa3d2059000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fa3d1e42000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa3d337d000)
すべてのライブラリファイルを/ opt/libから/ usr/libにコピーしました。これでプログラムが動作します。ご回答ありがとうございます。
Rootとしてldconfig
を実行して、問題が解決するかどうかを確認してください。
これを行うには多くの方法があり、そのほとんどはすでにここで述べられています。しかし、あなたがしたいシステムのライブラリファイルに誤ってライブラリファイルをコピーすることを避けてください。ライブラリに独自の名前を付けることについてはほとんど想像力がないので、これは簡単に行えます。
したがって、考慮すべき点がいくつかあります。
システム上のさまざまなライブラリの場所を見つけるには(検索の使用を除く)、ここを見てください。
cat /etc/ld.so.conf
cat /etc/ld.so.conf.d/*
Linuxでは、いくつかの標準的な場所があります。
/lib # for base system (don't use this!)
/usr/lib # for package manger installed apps
/usr/local/lib # for user installed apps
他にもたくさんありますが、おそらく/usr/local/lib
を使い続ける必要があります。次に、これらのライブラリの場所をシステムに通知する必要があります。 (彼が何をしているのかを知っている)クールなシステムの人は、これを行う方法としてldconfig
を使用しますが、ここで間違えた場合は、後悔することがあります。そのコマンドを使用する最も安全な方法は、フラグ-v -n
を使用してコマンドを冗長にし、追加する必要があるライブラリディレクトリをspecifyにすることです。
Sudo ldconfig -v -n /usr/local/lib/your-uber-libs
できました。ただし、何かをテストするだけの場合は、次のようにLD_LIBRARY_PATH
をコマンドラインから直接使用します。
LD_LIBRARY_PATH=/usr/local/lib/your-uber-libs ./your_uber_command
または、.bashrc
スクリプトに以下を追加します。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/your-uber-libs
これで、動的にリンクされたコマンドを実行できます。
ライブラリlibxerces-c3.1 asをインストールしてみてください。以下のコマンドを使用して、ライブラリをインストールします。
Sudo apt-get install libxerces-c3.1
これは私にとって魅力のように働きました。