2

質問が些細な場合は申し訳ありませんが、満足のいく答えが見つからずに、グーグルで検索してgccソースコードもダウンロードしました。

では、コンパイラ ( gcc/clang/etc... ) は libc のファイル名をどのように認識しているのでしょうか? UNIX ライクなシステムでは libc.a、libc.so などの名前が付けられていることは知っていますが、たとえば、mac os x では libSystem という名前が付けられています。名前はコンパイラのコードにハードコードされていると思いますが、まだ証拠が見つかりません。

4

1 に答える 1

1

C ライブラリ リンケージ フラグは、gcc、grep のソース コード、-lcまたはgcc のソース コードにハード コードされてい-lSystemます。libc.soコンパイル時に、gcc は名前またはその検索パスでlibc をlibc.a検索します (プレフィックスlibとサフィックス.soまたはを追加します.a) 。

以下は、grep '\-lc' -r ./gcc/config/gcc ソース コード ディレクトリの下からの結果です。

......
./gcc/config/i386/sysv5.h:  %{!shared:%{!symbolic:-lc -lcrt}}"

の結果grep '\-lSystem' -r ./gcc/config/

./gcc/config/darwin.h:#define LIB_SPEC "%{!static:-lSystem}"
于 2014-12-13T12:57:44.463 に答える