GNU/Linux >> Znalost Linux >  >> Linux

Proč clang stále potřebuje libgcc.a ke kompilaci mého kódu?

Musíte kompilovat s volbou -nodefaultlib nebo -nostdlibs .

Zde citace z dokumentace GCC (rozhraní clang je úplně stejné):

Jedna ze standardních knihoven, kterou obchází -nostdlib a -nodefaultlibs je libgcc.a , knihovna interních podprogramů, které GCC používá k překonání nedostatků konkrétních strojů nebo speciálních potřeb pro některé jazyky.

Možná budete muset spustit statické inicializační rutiny c++ a/nebo použít to, co poskytují soubory objektů crt<x>.o v adresáři lib. Tyto soubory jsou součástí libc a poskytuje spustitelný vstupní bod.


Clang nepřichází s linkerem, spoléhá se na ld namísto. A ld závisí na libgcc.a a/nebo libgcc.so na vašem systému (bez ohledu na to, že se jedná o LLVM linker ld.lld nebo GNU ld). To je důvod, proč se vám zobrazuje tato chybová zpráva.

Takže odpověď ve skutečnosti zní:

(a) linker vyžaduje, aby knihovna libgcc provedla svou vlastní práci na propojení

Mnohem více podrobností je k dispozici zde na omniprog.info:

Pokud se chceme zbavit GCC a použít clang jako náš výchozí kompilátor v systému, možná budeme muset provést nějaké úpravy na některých systémech založených na RPM. Clang neposkytuje linker, ale spoléhá na systémový linker, typicky ld, aby propojil spustitelné soubory. To je případ i na systémech FreeBSD a Mac OS X, kde je Clang výchozím kompilátorem. Můžeme to vidět pomocí volby -v pro clang++. Nyní ld nebude fungovat bez následujících souborů:

libgcc.a
libgcc_s.so
[...]


Linux
  1. Hašování hesel a proč to potřebujeme

  2. Proč Unixový čas začíná na 1970-01-01?

  3. Proč „ukončit &“ nefunguje?

  1. Proč potřebujete vypustit ifconfig pro ip

  2. Co je to linuxový server a proč jej vaše firma potřebuje?

  3. Proč clang při přesměrování generuje nesrozumitelný text?

  1. Proč potřebuje uživatel root oprávnění sudo?

  2. Proč Sudo ignoruje aliasy?

  3. Potřebuje změna swappiness restart?