2

私はCアプリケーションをクロスコンパイルしており、alsaライブラリに対してリンクしています-lasound

私の最新のクロスコンパイラは、ライブラリが見つからないと言ったので、コンパイラのライブラリディレクトリを調べて見つけました。

libasound.la libasound.so.2 libasound.so.2.0.0

が見つからなかったlibasound.soので、問題を回避するためにシンボリックリンクを作成しました

ln -s libasound.so.2.0.0 libasound.so

今はすべて問題ないようです。ただし、これは正しい方法ではないと確信しています。これに対してリンクするには、別のリンカー オプションを使用する必要がありますか? そして、それぞれの異なるlibasound.*ファイルは何を意味するのでしょうか?

4

1 に答える 1

4

Linux のライブラリの最も一般的な名前は次のとおりです。

  • 実際のライブラリはlibasound.so.2.0.0. 最後の 3 つの数字はライブラリのバージョン (major.minor.revision) です。
  • libasound.so.2システムに複数のライブラリがインストールされている場合は、ライブラリの優先 (最新) 2.* バージョンへのシンボリック リンクです。すべての 2.* バージョンは下位バイナリ互換性があると想定されています。
  • libasound.laで使用するライブラリに関する多くの情報を含むテキスト ファイルですlibtoollibtoolおよび他の autotoolsを使用する場合に便利です。
  • libasound.soツールチェーンが使用するライブラリへのシンボリック リンクです。これは、 とリンクするときに検索されるファイルです-lasound

おそらく、debian ベースのシステムではlibasound-devパッケージでのみインストールされるため、最後の 1 つがありません。手動で簡単に作成できます。ライブラリSONAMEにはヘッダーにエントリがあるため、実行時には必要ありません。

$ objdump -x /usr/lib/libasound.so | grep SONAME
  SONAME               libasound.so.2

これにより、動的リンカーは、使用したコンパイラ オプションに関係なく、実行時にその名前を検索します。

少し複雑なので、これである程度理解できたと思います...

于 2013-07-10T20:19:58.713 に答える