2014-04-12 101 views
1

我在網上閱讀關於ELF文件,並在理解一個標準命令以生成一個ELF文件。ELF文件生成命令和選項

到現在我一直在使用>的gcc -o test.c的test.o .Thats它運行我的代碼!

一篇文章說:

GCC -c test.c的//將生成ELF文件test.o

現在-o選項是告訴編譯器創建一個可執行文件(這是不是ELF)

另一個article說:

GCC -c test.c的-o test.o //會生成ELF test.o - >這裏是我困惑的地方。

-o應始終生成可執行文件。

+0

ELF是可執行文件的格式,所以我被「可執行文件(不是ELF)」 – IMSoP

+0

「一個可執行文件(它不是ELF)」這句話弄糊塗了。 – jthill

+0

因爲沒有人告訴我..我猜我採取了這種方式......感謝澄清......所以我應該得出結論:「可執行文件是所有ELF文件的子集......可以有許多文件是可重定位的exe是隻是一種類型「? – RootPhoenix

回答

3

選項-c告訴GCC生成目標文件。這個目標文件只是源文件test.c的編譯代碼,不是一個完整的程序。要生成完整的程序,您需要鏈接對象文件。或者不要使用-c選項。

-o選項告訴GCC什麼來命名輸出文件,不管它是什麼樣的輸出文件。


所以,以產生從單個源文件的可執行文件,最簡單的命令是

$ gcc test.c 

上述命令將創建在當前目錄名爲a.out的可執行文件。來命名輸出文件別的東西,你使用-o選項:

$ gcc test.c -o myprogram 

上述命令中的名字可執行程序myprogram

要使用與對象文件的中間步驟中使用-c選項,然後使用單獨的步驟來將上述兩個命令鏈接程序,像

$ gcc -c test.c 
$ gcc test.o -o myprogram 

是一樣的單個命令gcc test.c -o myprogram

+0

我可以在哪裏安裝ELF? >而這個命令:GCC -c test.c的將它創建一個ELF >而這個命令:GCC的測試。o -o myprogram會創建一個ELF – RootPhoenix

+0

@GNA您不需要關心可執行文件(或對象)文件的格式。在某些平臺上,它將是ELF,在其他平臺上。如果你所要做的只是創建一個可執行文件,那它的格式真的很重要嗎? –