Debes compilar con la opción -nodefaultlib
o -nostdlibs
.
Aquí una cita de la documentación de GCC (la interfaz clang es igual):
Una de las bibliotecas estándar omitidas por -nostdlib
y -nodefaultlibs
es libgcc.a
, una biblioteca de subrutinas internas que GCC utiliza para superar las deficiencias de determinadas máquinas o las necesidades especiales de algunos lenguajes.
Es posible que deba ejecutar rutinas de inicialización estáticas de c ++ y/o usar lo que proporcionan los archivos de objetos crt<x>.o
en el directorio lib. Estos archivos son parte de libc
y proporciona un punto de entrada ejecutable.
Clang no viene con un enlazador, se basa en ld
en cambio. Y ld
depende de libgcc.a
y/o libgcc.so
en su sistema (independientemente de que este sea el enlazador LLVM ld.lld
o GNU ld). Esta es la razón por la que aparece este mensaje de error.
Así que la respuesta es en realidad:
(a) el enlazador requiere que libgcc haga su propio trabajo de enlace
Muchos más detalles sobre esto están disponibles aquí en omniprog.info:
Si queremos deshacernos de GCC y usar clang como nuestro compilador predeterminado en el sistema, es posible que tengamos que hacer algunos ajustes en algunos sistemas basados en RPM. Clang no proporciona un enlazador, sino que se basa en el enlazador del sistema, normalmente ld, para enlazar ejecutables. Este es el caso incluso en los sistemas FreeBSD y Mac OS X donde Clang es el compilador predeterminado. Podemos ver esto usando la opción -v de clang++. Ahora, ld no funcionará sin los siguientes archivos:
libgcc.a
libgcc_s.so
[...]