2017-02-11 152 views
1

,我在我的64位的Ubuntu嘗試這是我的運行時庫的一些符號:GCC鏈接手動失敗:找不到

首先我有一個簡單的程序

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

然後我手動指定它是如何鏈接:

$ 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 

我得到了一些錯誤:

/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 

我想知道gcc如何處理所有必要的目標文件並嘗試手動完成。如何解決它?謝謝。

回答

1

如何解決?

你缺少libc符號,所以你需要鏈接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 

記住,如果你真的要鏈接的東西「手動」,你會ld做到這一點,不是gcc