5

次の 2 つの方法でライブラリ (共有と静的の両方) を gcc/g++ に指定することに実質的な違いがあるかどうかを理解したいと思います (CC は g++ または gcc にすることができます)。

CC -o output_executable /path/to/my/libstatic.a /path/to/my/libshared.so source1.cpp source2.cpp ... sourceN.cpp

CC -o output_executable -L/path/to/my/libs -lstatic -lshared source1.cpp source2.cpp ... sourceN.cpp

完全に指定されたライブラリ名を直接渡すと、静的バージョンまたは動的バージョンを選択する際の制御が強化されるという大きな違いしかわかりませんが、実行可能ファイルのビルド方法または実行時に動作しますよね?

アンドレア。

4

1 に答える 1

5

さて、私はいくつかの実験とgccドキュメントのより深い読みに基づいて自分自身に答えることができます:

gccドキュメントから:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

[...]リンカは、これまでに参照されているが定義されていないシンボルを定義するメンバーをスキャンすることにより、アーカイブファイルを処理します。ただし、見つかったファイルが通常のオブジェクトファイルの場合は、通常の方法でリンクされます。-lオプションを使用することとファイル名を指定することの唯一の違いは、-lがライブラリをlib' and.a'で囲み、複数のディレクトリを検索することです。

これは、gccコマンドラインでオブジェクトファイルを直接指定する3番目のオプションに関する関連する疑問にも実際に答えます(つまり、この場合、オブジェクトファイル内のすべてのコードは最終的な実行可能ファイルの一部になり、アーカイブを使用している間はオブジェクトファイルのみになります)本当に必要なものが引き込まれます)。

于 2010-03-30T08:57:11.653 に答える