Sie müssen mit der Option -nodefaultlib
kompilieren oder -nostdlibs
.
Hier ein Zitat aus der GCC-Dokumentation (Clang-Schnittstelle ist genauso):
Eine der Standardbibliotheken, die von -nostdlib
umgangen wird und -nodefaultlibs
ist libgcc.a
, eine Bibliothek interner Subroutinen, die GCC verwendet, um Mängel bestimmter Maschinen oder spezielle Anforderungen für einige Sprachen zu überwinden.
Möglicherweise müssen Sie statische C++-Initialisierungsroutinen ausführen und/oder verwenden, was von den Objektdateien crt<x>.o
bereitgestellt wird im lib-Verzeichnis. Diese Dateien sind Teil von libc
und bietet einen ausführbaren Einstiegspunkt.
Clang kommt nicht mit einem Linker, es verlässt sich auf ld
stattdessen. Und ld
hängt von libgcc.a
ab und/oder libgcc.so
auf Ihrem System (unabhängig davon, ob dies der LLVM-Linker ld.lld
ist oder GNU-ld). Aus diesem Grund erhalten Sie diese Fehlermeldung.
Die Antwort lautet also eigentlich:
(a) Der Linker verlangt, dass libgcc seine eigene Linkarbeit durchführt
Viele weitere Details dazu finden Sie hier auf omniprog.info:
Wenn wir GCC loswerden und Clang als unseren Standard-Compiler auf dem System verwenden wollen, müssen wir möglicherweise einige Anpassungen an einigen RPM-basierten Systemen vornehmen. Clang stellt keinen Linker bereit, sondern verlässt sich auf den Linker des Systems, typischerweise ld, um ausführbare Dateien zu verknüpfen. Dies ist sogar auf FreeBSD- und Mac OS X-Systemen der Fall, auf denen Clang der Standard-Compiler ist. Wir können dies sehen, indem wir die Option -v für clang++ verwenden. Jetzt funktioniert ld nicht ohne die folgenden Dateien:
libgcc.a
libgcc_s.so
[...]