Il faut compiler avec l'option -nodefaultlib
ou -nostdlibs
.
Voici une citation de la documentation de GCC (l'interface clang est la même) :
Une des bibliothèques standard contournées par
-nostdlib
et-nodefaultlibs
estlibgcc.a
, une bibliothèque de sous-programmes internes que GCC utilise pour surmonter les lacunes de machines particulières ou les besoins particuliers de certains langages.
Vous devrez peut-être exécuter des routines d'initialisation statiques c++ et/ou utiliser ce qui est fourni par les fichiers objets crt<x>.o
dans le répertoire lib. Ces fichiers font partie de libc
et fournit un point d'entrée exécutable.
Clang n'est pas fourni avec un éditeur de liens, il s'appuie sur ld
Au lieu. Et ld
dépend de libgcc.a
et/ou libgcc.so
sur votre système (qu'il s'agisse de l'éditeur de liens LLVM ld.lld
ou GNU ld). C'est la raison pour laquelle vous avez ce message d'erreur.
La réponse est donc :
(a) l'éditeur de liens nécessite que libgcc fasse son propre travail de liaison
Beaucoup plus de détails à ce sujet sont disponibles ici sur omniprog.info :
Si nous voulons nous débarrasser de GCC et utiliser clang comme compilateur par défaut sur le système, nous devrons peut-être faire quelques ajustements sur certains systèmes basés sur RPM. Clang ne fournit pas de lien, mais s'appuie sur le lien du système, généralement ld, pour lier les exécutables. C'est le cas même sur les systèmes FreeBSD et Mac OS X où Clang est le compilateur par défaut. Nous pouvons le voir en utilisant l'option -v de clang++. Désormais, ld ne fonctionnera plus sans les fichiers suivants :
libgcc.a
libgcc_s.so
[...]