/some/libにある共有ライブラリlibA.soから始めます。 libA.soの機能に依存するライブラリ(libB.so)をビルドします。ですから、libB.soを作成するときには、g ++のコマンドラインに-L/some/lib -lAを含めます。 libB.soも/ some/libにあります。リンクの依存関係
今、libB.soを使用する実行可能ファイルをビルドします。私は期待される-L/some/libと-lBをg ++リンカに提供します。しかし、 "libA.so"が見つからないため、エラーが発生します。リンカー行に "-lA"を追加すると、プログラムがリンクします。
なぜ「libA.so」が見つからないのかわかりません。私は確かになぜリンカの行に "-lA"を含めることがそれを見つけることができます理解していない。 libA.soが必要であることが既に分かっているようで、libA.soはlibB.soと同じパスにあります。
誰かがこれを説明することはできますか?私はlibB.soをリンクしたいすべての実行可能ファイルに明示的に "-lA"を入れなければならないという考えが嫌いです。私は何か間違ったことをしましたか?
なぜ "-lA"はそれを検索可能なパスに入れますか?私は "-lA"が見つかる必要のあるオブジェクトのリストに入れています。 – John
簡単なプログラムを試してみましょう: 'g ++ -o foo foo.o - lA -L/some/lib'の場合、* linker *はライブラリ 'libA'を見つけますが、* loader *が見つからないためプログラムを実行できません。私の例のように 'LD_LIBRARY_PATH'を設定してプログラムを実行する必要があります。リンクと読み込みを混同しないでください! –
最終実行ファイルがlibBの関数/クラスのみを使用する場合、なぜlibAとリンクする必要があるのでしょうか?窓では、本当にする必要はありません。 –