Devi compilare con l'opzione -nodefaultlib
o -nostdlibs
.
Ecco una citazione dalla documentazione di GCC (l'interfaccia clang è la stessa):
Una delle librerie standard bypassate da
-nostdlib
e-nodefaultlibs
èlibgcc.a
, una libreria di subroutine interne che GCC utilizza per superare le carenze di macchine particolari o esigenze speciali per alcuni linguaggi.
Potrebbe essere necessario eseguire routine di inizializzazione statica c++ e/o utilizzare quanto fornito dai file oggetto crt<x>.o
nella directory lib. Questi file fanno parte di libc
e fornisce un punto di ingresso eseguibile.
Clang non viene fornito con un linker, si basa su ld
invece. E ld
dipende da libgcc.a
e/o libgcc.so
sul tuo sistema (indipendentemente dal fatto che questo sia il linker LLVM ld.lld
o GNU ld). Questo è il motivo per cui hai questo messaggio di errore.
Quindi la risposta è in realtà:
(a) il linker richiede che libgcc esegua il proprio lavoro di collegamento
Maggiori dettagli su questo sono disponibili qui su omniprog.info:
Se vogliamo sbarazzarci di GCC e usare clang come nostro compilatore predefinito sul sistema, potremmo dover apportare alcune modifiche su alcuni sistemi basati su RPM. Clang non fornisce un linker, ma si affida al linker del sistema, tipicamente ld, per collegare gli eseguibili. Questo è il caso anche su sistemi FreeBSD e Mac OS X dove Clang è il compilatore predefinito. Possiamo vederlo usando l'opzione -v di clang++. Ora, ld non funzionerà senza i seguenti file:
libgcc.a
libgcc_s.so
[...]