静的/動的ライブラリーの名前を決定します。

静的/動的ライブラリーの名前を決定します。

私は多くの場合、Unix / Linux Cライブラリ(たとえば)を使用するサードパーティのCコードスニペットで作業することがよくあります#include <glib.h>。たとえば#include <net/if.h>、特定のライブラリファイル名またはpkg-config名を知る必要があります。 「2.0」、「1」のヘッダファイルが異なるため、推測できません。-lglib-2.0-lbluetoothpkg-config --libs dbus-1

API /ライブラリが所有するライブラリファイルの正確な名前をどのように見つけることができますか?上記の例では、#include <glib.h>ライブラリファイルの名前をどのように見つけることができますか-lglib-2.0?残念なことに、Glib / dbus / allへのオンライン参照には、「ライブラリファイル名はglib-2.0です」としか記載されていません。

これを把握するために使用できる端末コマンドはありますか?これを見つけるために使用できるユーティリティはありますか?オンラインAPI /ライブラリ参照はこれを見つけるのに本当に悪いです。

場所を見つけたい場合は、hci.h簡単に見つけることができますlocate hci.h。ライブラリ名を探す端末コマンドのようなものはありますか?

ベストアンサー1

特定の機能を使用するためにどのライブラリが必要かを知るための一般的な方法はありません。このライブラリのドキュメントを確認する必要があります。よく書かれたチュートリアルやAPIリファレンスは、これが何であるかを教えてくれます。

少なくとも図書館が何であるかは理解できます。パック必須:ヘッダーファイルを含むライブラリパッケージと同じです。ヘッダーファイルを含むパッケージを確認する方法は、ディストリビューション(dpkg -S /usr/include/glib-2.0/glib.hDebian/Ubuntu/Mint/...、rpm -qf /usr/include/glib-2.0/glib.hRHEL/CentOS/Fedora/...など)によって異なります。ライブラリパッケージがわかったら、その内容を一覧表示して埋め込み.soファイルを見つけます。

dpkg -L libglib2.0-dev | grep '\.so$'
rpm -qlf /usr/include/glib-2.0/glib.h | grep '\.so$'

Glibには複数の.soファイルがあり、特定の機能にどのファイルが必要かを自動的に知る方法はありません(複数のファイルがある可能性があります)。

ライブラリでそれを使用する場合は、pkg-configヘッダーとライブラリパスをハードコードする代わりにそれを使用する必要があります。しかし、すべての図書館がそれを使用するわけではありません。ディストリビューションのライブラリパッケージは、そのpkg-configパッケージ(たとえばdpkg -s libglib2.0-dev |grep '^Depends:.*pkg-config')に依存する必要があるため、一般的に理解できます。

ドキュメントが本当に不都合な場合は、ライブラリで定義したシンボルを一覧表示してみてください。

nm -D /usr/lib/x86_64-linux-gnu/libgio-2.0.so |awk '$2=="T" {print $3}'

他のライブラリが必要かどうかを知らないので、これは完璧な方法ではありません。

おすすめ記事