我知道這是一個非常基本的問題,但同時,我發現類似的問題,我沒有找到一個解決辦法...GCC -c和ld:EXEC沒有這樣的文件或目錄
我有這個同樣的問題簡單的程序:
#include <stdio.h>
void main()
{
printf("Hi\n");
fflush(stdout);
}
如果我用gcc main.c編譯,我沒有問題。
如果我編譯用gcc -c main.c中,然後用LD -o主main.o鏈接,我獲得錯誤未定義參考爲提出,標準輸出和fflush 。我在末尾添加了-lc,二進制文件僅在_start處創建了warnig,但是當我執行該程序時,它返回一個通用的「文件未找到」錯誤。 如果我沒看錯的問題是,連接器使用的libc.so.1不存在的相反,我認爲,libc.so.6的:與readelf -a主
[Requesting program interpreter: /usr/lib/libc.so.1]
有誰知道什麼是錯的?這是一些環境/系統問題,或者我必須更改ld選項?怎麼樣?
謝謝你,對不起,「愚蠢」的問題......(和我可憐的「英語」)
編輯:「解決」(見下文),我想補充的形式獲得的新的ld選項GCC -v main.c中 [COLLECT_GCC_OPTIONS]我試圖在最小,以減少:
ld -o main main.o --hash-style=gnu --as-needed -dynamic-linker /lib/ld-linux.so.2 -z relro /usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/crt1.o /usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/crti.o /usr/lib/gcc/i686-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/i686-linux-gnu/5 -L/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu -L/usr/lib/gcc/i686-linux-gnu/5/../../../../lib -L/lib/i386-linux-gnu -L/lib/../lib -L/usr/lib/i386-linux-gnu -L/usr/lib/../lib -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i686-linux-gnu/5/crtend.o /usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/crtn.o
EDIT2:啓動程序,我認爲分鐘是
ld -o main main.o --as-needed -dynamic-linker /lib/ld-linux.so.2 -lc
它返回一個分段錯誤(我認爲錯過了鏈接到crt *)
如果你讓'gcc'調用'ld',你會得到同樣的錯誤,也就是說,如果你用'gcc -o main main.o'鏈接會發生什麼? –
不,如說我讓海灣合作委員會呼籲ld我沒有問題,對不起,我不得不更好地突出它 – user7707645
這個答案幫助:http://stackoverflow.com/a/14418246/646887? –