2012-10-13 79 views
0

出於某種原因,我必須手動鏈接glibc。我試圖運行下面的程序:顯式glibc鏈接之後的「分段錯誤(核心轉儲)」。

#include <stdio.h> 
int _start(){ 
    printf("ABCDE"); 
    return 0; 
} 

爲了編譯它,我鍵入以下命令:

gcc -c main.c -o main.o 
gcc -L/lib/x86_64-linux-gnu/ -nostdlib main.o -o main -lc 

不幸的是,在運行./main後我只得到 分割故障(核心轉儲)

任何人都可以告訴我我做錯了什麼?

+0

你想重寫rt啓動?因爲你的ID是[保留](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier)。 – WhozCraig

+0

您必須手動鏈接'-lc',因爲'-nostdlib'會禁用它。 – duskwuff

回答

2

_exit(0);應該做的伎倆。

但是,你想達到什麼目的? Sample

+0

非常感謝!我必須編寫一個應用程序,該應用程序將在具有舊版glibc版本的舊內核上運行。我發現鏈接是否能正常工作。 – nkdm

+0

@nkdm在你的程序變得稍微複雜之後,你在這裏嘗試的方法*極不可能在較舊的內核上工作。你應該讀這些答案:http://stackoverflow.com/a/2079757/50617 http://stackoverflow.com/a/8658468/50617 –

+0

我有編譯器動態鏈接GLIBC 2.15,但在目標系統上我有GLIBC 2.4不兼容。我認爲與' - 靜止'選項聯繫會帶來很多記憶,但幸運的是它是可以接受的。 – nkdm