web-dev-qa-db-ja.com

共有ライブラリの読み込みエラー

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)
17
user459811

すべてのライブラリファイルを/ opt/libから/ usr/libにコピーしました。これでプログラムが動作します。ご回答ありがとうございます。

4
user459811

Rootとしてldconfigを実行して、問題が解決するかどうかを確認してください。

26
ipk

これを行うには多くの方法があり、そのほとんどはすでにここで述べられています。しかし、あなたがしたいシステムのライブラリファイルに誤ってライブラリファイルをコピーすることを避けてください。ライブラリに独自の名前を付けることについてはほとんど想像力がないので、これは簡単に行えます。

したがって、考慮すべき点がいくつかあります。

  • これらのファイルをシステムの永続的な部分にする必要がありますか?
  • テストと頻繁な更新のためにインストールする必要があるだけですか?
  • 特定のコマンドを1回または2回that実行する場合にのみ必要ですか?
  • ネイティブライブラリはどこにありますか?

システム上のさまざまなライブラリの場所を見つけるには(検索の使用を除く)、ここを見てください。

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

これで、動的にリンクされたコマンドを実行できます。

2
not2qubit

ライブラリlibxerces-c3.1 asをインストールしてみてください。以下のコマンドを使用して、ライブラリをインストールします。

 Sudo apt-get install libxerces-c3.1

これは私にとって魅力のように働きました。

1
Venkat Madhav