私の問題を説明するために、簡単なリンクの使用法から始めたいと思います。共有ライブラリlibz.dll z
(D:/libs/z/shared/libz.dll) または静的ライブラリ libz.a (D:/libs/z/static/libz. a)。
それに対してリンクしたい場合は、次のようにします。
gcc -o main.exe main.o -LD:/libs/z/static -lz
このドキュメントによると、gcc は libz.a を検索します。
メンバがオブジェクト ファイルであるアーカイブ ファイル
次のこともできます。
gcc -o main.exe main.o -LD:/libs/z/shared -lz
-l
フラグが を検索することは、上記のドキュメントには記載されていませんlib<name>.so
。
libz.a と libz.dll を同じディレクトリに置くとどうなりますか? ライブラリはどのようにプログラムとリンクされますか? フラグが必要な理由-Wl,-Bstatic
と-Wl,-Bdynamic
if-l
が共有ライブラリと静的ライブラリの両方を検索するのはなぜですか?
共有ライブラリ配布物をコンパイルする場合、一部の開発者が同じモジュールに対して .a ファイルと .dll ファイルを提供するのはなぜですか?
たとえば、Qt は bin ディレクトリに .dll ファイルを、lib ディレクトリに .a ファイルを提供します。同じライブラリですが、それぞれ共有と静的のように構築されていますか? または、.a ファイルは、実際のライブラリの実装がある共有ライブラリとのリンクを提供するある種のダミー ライブラリですか?
もう 1 つの例は、Windows の OpenGL ライブラリです。すべてのコンパイラが MingW の libopengl32.a のような静的 OpenGL ライブラリを提供しなければならないのはなぜですか?
拡張子が .dll.a および .la のファイルは何に使用されますか?
PSここにはたくさんの質問がありますが、それぞれが前のものに依存していると思います。それらをいくつかの質問に分割する必要はありません.