Prova ad aggiungere -nostartfiles
alle opzioni del tuo linker, ad es.
$(LINK) -nostartfiles -g ...
Dalla documentazione di 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.
Questo causa crt1.o
non essere collegato (normalmente è collegato per impostazione predefinita) - normalmente utilizzato solo quando si implementa il proprio _start
codice.
-shared
l'opzione link deve essere usata quando compili un .so
Il problema per me era che per errore ho inserito int main()
in uno spazio dei nomi. Assicurati di non farlo altrimenti otterrai questo fastidioso errore di collegamento.
Spero che questo aiuti qualcuno :)