私はSFMLで作業していましたが、少しテストプログラムをコンパイルし、リンケージオプション-lsfml-audio
を追加しました。次に、私はldd ./program
を使って、リンクしていた動的ライブラリを見ました。驚いたことに、たくさんのものがありました。私は自分のmakefileで手動で選択したものがなく、pkg-config --libs
も使用していませんでした。共有ライブラリの依存関係をリンクする
私は共有ライブラリについて読んで始め、疑問を解決するための小さな例を作りました。いくつかのライブラリが自動的にそれらの依存関係をリンクあなたのメイク (手動またはpkg-config
のようなスクリプトを使用して)、およびその他の のライブラリに依存関係を追加するあなたを必要とする理由
:しかし、私はこの質問がありますか?
あなたがダイナミックライブラリを作成している、ユーザーが後で手動で依存関係を追加する手間を避けるためにg++ -shared ...
コマンドで適切な-ldependency
オプションを追加することと同じくらい簡単です。なぜ利用可能なライブラリの多くはそれをしていないのですか?
私はそれがリンクされるライブラリなどの微調整の能力に関係していなければならないと思います。
私はここでいくつかの名前を呼び出す必要があると思います:共有ライブラリは通常依存関係を引き出しません( '* .la'ファイルを見ると' libtool'です)。ダイナミックローダは共有ライブラリの '.NEEDED'ヘッダからそれらを把握するので、それらをインクルードする必要はありません。 'libtool'が紹介しているオーバーリンクの問題に加えて、リンク時にシンボル定義を探す必要があるため、ビルドをたくさん遅くすることができます。 –
@honk、はい、libtoolはこれらの問題の原因の1つです。しかし、pkg-configスクリプトもそれを実行できます。いずれにせよ、ELFプラットフォームでは必ずしも必要ではありません。直接使用するものだけをリンクする必要があります(これには、インライン関数やマクロ経由で使用されるものが含まれます) – bdonlan