2017-02-11 7 views
1

Je tentais sur mon 64 bits ubuntu:gcc relier manuellement échoué: ne peut pas trouver des symboles de ma bibliothèque d'exécution

D'abord, j'ai un programme simple

$ cat test.c 
int f(int x){ 
     int i=(x/42); 
     return i; 
} 
int main(){ 
     return 0; 
} 

Puis-je spécifier manuellement comment il est lié:

$ gcc test.c -nostdlib /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o 

J'ai eu quelques erreurs:

/usr/lib/x86_64-linux-gnu/crt1.o:In function ‘_start’中: 
(.text+0x12):unresolved reference to ‘__libc_csu_fini’ 
/usr/lib/x86_64-linux-gnu/crt1.o:In function ‘_start’: 
(.text+0x19): unresolved reference to ‘__libc_csu_init’ 
/usr/lib/x86_64-linux-gnu/crt1.o:In function ‘_start’: 
(.text+0x25): unresolved reference to ‘__libc_start_main’ 
collect2: error: ld returned 1 exit status 

J'essayais de voir comment gcc gère tous les fichiers objets nécessaires et essaie de le faire manuellement. Comment le réparer? Merci.

Répondre

1

Comment le réparer?

Il vous manque libc symboles, de sorte que vous devez lier libc:

gcc test.c -nostdlib /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o -lc 

Gardez à l'esprit que si vous vraiment voulez relier quelque chose « manuellement », vous le ferez avec ld, pas gcc