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ファイルにリンクしていたシンボリックリンクを作成します。
ありがとうサイモン!
ライブラリのシンボリックリンクは、トレースする最終ターゲットが存在し、アクセス可能である限り、正常に機能します。
実行時に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
を静的に再コンパイルします。 (動作しますが、気にしないでください。)最初の3つのいずれかの後で、ldconfig
を再実行して、リンカーキャッシュが更新されるようにします。 (その後、ldconfig -v
を実行して、解決可能であることを確認できます。)
これらは手順ではなく、オプションであることに注意してください。あなたはそれらのうちの1つをする必要があるだけです。
タイトルを更新してよかったです。 #include
ディレクティブはリンクとは何の関係もありません。
私はあなたがしたのと同じエラーを受け取りました、そしてここで言及された解決策を読んだ後、私は問題を(Ubuntu 8で)解決しました:
Sudo ln -s /usr/local/lib/libid3-3.8.so.3 /usr/lib/libid3-3.8.so.3
これで問題が解決しました。/usr/local/libを/etc/ld.so.confに追加して(すでにそこにある場合を除き、一度だけ配置してください)、ldconfigを実行します。