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
jelibgcc.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
[...]