ld non riesce a trovare il file c
Domanda
Ho un file di assieme e un file c compilato per .o file (start.o e main.o) e sta cercando di collegarli con ld. Sto usando questo comando:
ld -T link.ld -o kernel.bin start.o main.o
dove link.ld è uno script del linker, ma quando l'eseguo, ottengo questo errore:
start.o:start.o:(.text+0x2d): undefined reference to `_main'
nel file di assieme, che io chiamo il file c con questa funzione:
stublet:
extern _main
call _main
jmp $
Chiunque può vedere che cosa c'è che non va?
Soluzione
Alcuni compilatori (come GCC per Linux) non aggiungono _
di default in C esportazioni di libreria. Prova nm main.o
per vedere il nome di riferimento vero e proprio. Si potrebbe main
piuttosto che _main
.
Altri suggerimenti
Alcuni linker sono sensibili al modo che i file oggetto o librerie appaiono sulla riga di comando -. Provare a scambiare l'ordine dei due file oggetto
Vorrei anche sottolineare che lo standard C non garantisce che main () è una funzione -. Infatti, programmi C sono esplicitamente vietato chiamare principale