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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top