web-dev-qa-db-ja.com

Linuxプログラムが実行時に共有ライブラリを見つけることができません

Linuxプログラムid3v2をコンパイルしようとしていますが、適切なライブラリが見つからないと表示されます。

id3v2: error while loading shared libraries: libid3-3.8.so.3: cannot open shared object file: No such file or directory

これがlidid3ライブラリをプルする部分だと思いますか?

ファイルは存在しますが、彼らが探しているのは実際には以下へのシンボリックリンクです。

「ibid3-3.8.so.3.0.0」

シンボリックリンクをたどることができないのは問題なのかしら?どこで変更しようとしているのかがわかっていれば、手動で変更して0.0を探すことができるかもしれません。

詳細を明確にさせていただきます。

インクルードは次のように行われているようです。

id3v2:  convert.o list.o id3v2.o genre.o
        ${CXX} ${LDFLAGS} -pedantic -Wall -g -o $@ $^ -lz -lid3

私はサイモンのアドバイスを利用して、図書館を期待できる場所が複数あることを理解することができました。プログラムがACTUALファイルにリンクしていたシンボリックリンクを作成します。

ありがとうサイモン!

9
Scott

ライブラリのシンボリックリンクは、トレースする最終ターゲットが存在し、アクセス可能である限り、正常に機能します。

実行時にlibid3-3.8.so.3に対してリンクされることを希望する、動的にリンクされた実行可能ファイルを作成しました。これは、ビルドフェーズ中に-L/path/to/libid3/directory -lid3のようなものとリンクされている可能性があります。

libid3を利用可能にするためのいくつかのオプションがあります。一般的に優先度の高い順になります(ファイルの場所について言及しなかったため、私は一般的です)。

  • libid3*(または/etc/ld.so.confまたは/lib)にリストされているディレクトリに/usr/libへのシンボリックリンクを作成します
  • libid3*/etc/ld.so.conf(または/libまたは/usr/lib)にリストされているディレクトリにコピーします(デフォルト)
  • libid3*を含むディレクトリを/etc/ld.so.confに追加します
  • Id3v2実行可能ファイルを実行する前にLD_LIBRARY_PATH=/directory/path/to/libid3*を設定してください。
  • id3v2を静的に再コンパイルします。 (動作しますが、気にしないでください。)

最初の3つのいずれかの後で、ldconfigを再実行して、リンカーキャッシュが更新されるようにします。 (その後、ldconfig -vを実行して、解決可能であることを確認できます。)

これらは手順ではなく、オプションであることに注意してください。あなたはそれらのうちの1つをする必要があるだけです。

タイトルを更新してよかったです。 #includeディレクティブはリンクとは何の関係もありません。

29

私はあなたがしたのと同じエラーを受け取りました、そしてここで言及された解決策を読んだ後、私は問題を(Ubuntu 8で)解決しました:

Sudo ln -s /usr/local/lib/libid3-3.8.so.3 /usr/lib/libid3-3.8.so.3
4

これで問題が解決しました。/usr/local/libを/etc/ld.so.confに追加して(すでにそこにある場合を除き、一度だけ配置してください)、ldconfigを実行します。

2
zombocom