なぜいくつかの静的ライブラリ(lib * .a)は、共有ライブラリ(lib * .so)がリンクされているのと同じ方法でリンクできる(ld -l switch)いくつかできない?GCCを使用して静的ライブラリをリンクする適切な方法
静的かどうかにかかわらず、静的かどうかに関係なくすべてのライブラリが-l ...とリンクできることを教えていましたが、私はこれまでのライブラリ( "GLFW")を実行しましたが、この方法でリンクしようとするとリンクエラーが発生します。
this questionの回答によると、静的ライブラリをリンクする「適切な」方法は、-lを使用するのではなく、自分のオブジェクトファイルとともに直接それらを含めることです。そして、GLFWライブラリの場合、これは確かに問題を解決します。しかし、私が使用している他のすべての静的ライブラリは、-lとリンクするとうまく動作します。だから、
:
- ではなく、直接含まよりリンクされたときに動作しないように、この1つのライブラリを引き起こす可能性がありますか?私が原因を知っていれば、ライブラリを編集して再コンパイルして問題を解決できるかもしれません。
- 共有ライブラリをリンクするのと同じ方法で静的ライブラリをリンクすることを想定していないのは本当ですか? (そうでない場合は、なぜですか?)
- ライブラリがこのように直接組み込まれている場合、リンカは未使用のライブラリ関数を出力実行可能ファイルから削除できますか?
はい、各ライブラリへのパスは、対応する-lフラグの前に-Lを使用して提供されます。 GCCはライブラリを見つけることができますが、ライブラリ内から多数の未定義参照エラーを出します。 – Nairou