2010-12-28 41 views
11

LDFLAGSを使用してgcc_sとgccをリンクする方法の違いは何ですか? gcc_sは静的ライブラリとgcc共有ライブラリですか?-lgcc_sとgccの違い

私はgccとリンクするために言及されている解決策を探していたので、私の場合はgcc_sだけしか動作しませんでした。私は本当の違いを知りたい。

シンボル/some/library/path.a(_filename.oで `__name_here」隠れ

< < )はこの場合DSO

によって参照され、問題は通常「のいずれか-l GCCを追加することによって解決されます"または" gcc -print-libgcc-file-name "をリンクフラグ(LDFLAGS)に設定します。しかし、私の他の通常のプラットフォーム(i386、amd64、sparc64)とは異なり、ここでは十分ではありませんでした。私は、libc を最終実行ファイルにリンクするときに、このフラグが必要であることに気付きました。 リンク:http://people.defora.org/~khorben/200903.html

+0

'-static'が使用されたときに使用される' libgcc_eh.a'もあります。 http://stackoverflow.com/questions/10763394/how-to-build-ac-program-using-a-custom-version-of-glibc-and-static-linking –

答えて

12

libgcc_s.soは共有ライブラリです。libgcc.aは静的ライブラリです。それらは同等ではありません。両方をリンクする必要があるかもしれません。 libgcc_sには、プロセス内に複数のコピーを持たないグローバル変数が含まれています。 libgccのコードは複数回リンクするのが安全です。

+0

こんにちは、ありがとうございます、<<必要かもしれません両方をリンクする。この必然性がいつ起きるでしょうか? – kumar

+3

@kumar:いくつかのシンボル(たとえば '__register_frame')はlibgcc_sにのみあり、他のシンボル(例えば' __eprintf')はlibgccにのみあります。 'nm -D - defined-only-only libgcc_s.so' respを使います。 'nm -defined-only-libgcc.a'を使って比較する完全なリストを取得します。 –

+1

なぜ我々は両方を必要としますか?なぜ彼らは同じではなく、ただ1つは静的でもう1つは動的ですか? –