GNU/Linux >> Linux の 問題 >  >> Linux

なぜ私のコードをコンパイルするために、clang はまだ libgcc.a を必要とするのですか?

オプション -nodefaultlib でコンパイルする必要があります または -nostdlibs .

GCC ドキュメントからの引用 (clang インターフェースはまったく同じです):

<ブロック引用>

-nostdlib によってバイパスされる標準ライブラリの 1 つ と -nodefaultlibs libgcc.a です は、GCC が特定のマシンの欠点や一部の言語の特別なニーズを克服するために使用する内部サブルーチンのライブラリです。

C++ 静的初期化ルーチンを実行するか、オブジェクト ファイル crt<x>.o によって提供されるものを使用する必要がある場合があります。 lib ディレクトリにあります。これらのファイルは libc の一部です 実行可能なエントリ ポイントを提供します。


Clang にはリンカーが付属しておらず、ld に依存しています。 代わりは。そして ld libgcc.a に依存 および/または libgcc.so あなたのシステムで (これが LLVM リンカ ld.lld であるかどうかに関係なく) または GNU ld)。これが、このエラー メッセージが表示される理由です。

答えは実際には次のとおりです。

<ブロック引用>

(a) リンカーは libgcc が独自のリンク作業を行うことを要求します

詳細については、omniprog.info をご覧ください:

<ブロック引用>

GCC を取り除き、clang をシステムのデフォルト コンパイラとして使用する場合は、一部の RPM ベースのシステムで調整が必要になる場合があります。 Clang はリンカーを提供しませんが、システムのリンカー (通常は ld) に依存して実行可能ファイルをリンクします。これは、Clang がデフォルトのコンパイラである FreeBSD および Mac OS X システムでも当てはまります。これは、clang++ の -v オプションを使用して確認できます。現在、次のファイルがないと ld は機能しません:

<ブロック引用>

libgcc.a
libgcc_s.so
[...]


Linux
  1. ipのifconfigを削除する必要がある理由

  2. パスワードハッシュとその必要性

  3. Swappinessの変更には再起動が必要ですか?

  1. なぜRsyncは壊れたパイプ(32)で失敗し、Io.c(820)でソケットIo(コード10)でエラーが発生するのですか?

  2. Ubuntuに2つのカーネルが必要なのはなぜですか?

  3. なぜ mktemp が必要なのですか?

  1. ファイルにリダイレクトするときに stdout を明示的にフラッシュする必要があるのはなぜですか?

  2. Clang は GCC でコンパイルされた .a ライブラリでコードをコンパイルできますか?

  3. Linux で .so.1 ファイルが必要なのはなぜですか?