Intenta agregar -nostartfiles
a las opciones de su enlazador, es decir,
$(LINK) -nostartfiles -g ...
De la documentación de gcc:
-nostartfiles
Do not use the standard system startup files when linking. The standard system libraries are used normally, unless -nostdlib or -nodefaultlibs is used.
Esto provoca crt1.o
no debe vincularse (normalmente está vinculado de forma predeterminada):normalmente solo se usa cuando implementa su propio _start
código.
-shared
la opción de enlace debe usarse cuando compila un .so
El problema para mí fue que, por error, puse int main()
en un espacio de nombres. Asegúrate de no hacer eso, de lo contrario obtendrás este molesto error de enlace.
Espero que esto ayude a alguien :)