13

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ファイルにリンクしていたシンボリックリンクを作成します。

ありがとうサイモン!

4

3 に答える 3

35

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

実行時に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
  • LD_LIBRARY_PATH=/directory/path/to/libid3*id3v2実行可能ファイルを実行する前に設定します。
  • 静的に再コンパイルしid3v2ます。(動作しますが、気にしないでください。)

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

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

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

于 2011-01-21T02:26:54.817 に答える
6

あなたと同じエラーが発生しました。ここに記載されている解決策を読んだ後、(Ubuntu 8で)次の方法で問題を解決しました。

sudo ln -s /usr/local/lib/libid3-3.8.so.3 /usr/lib/libid3-3.8.so.3
于 2011-10-03T05:49:10.567 に答える
2

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

于 2013-01-15T20:39:20.333 に答える