gcc編譯生成o程序
1. 請問:c語言編譯成功後生成後綴名為.o的文件,什麼東東,什麼作用。
是編譯成功後的文件。
以hello.c為例:
先將源文件編譯成目標文件:gcc - c hello.c。生成hello.o文件,再將目標文件編譯成可執行文件:gcc -o hello hello.o
這樣就生成了可執行文件,在./hello就可以運行hello了。
2. linux gcc編譯好C文件後生成.o目標文件,但是在執行中($./test)出現沒有那個文件或目錄,請大神幫忙。
.o文件是不能被執行的, c的源碼要經過編譯和鏈接才能生成可執行文件,你只是編譯了,沒有鏈接,這個文件相當於Windows下的test.obj而已。gcc -Wall test.c -o test
3. gcc-c和-o有什麼區別
-c和-o都是gcc編譯器的可選參數。
-c表示只編譯(compile)源文件但不鏈接,會把.c或.cc的c源程序編譯成目標文件,一般是.o文件。-o用於指定輸出(out)文件名。不用-o的話,一般會在當前文件夾下生成默認的a.out文件作為可執行程序。
例如:
gcc -c test.c將生成test.o的目標文件
gcc -o app test.c將生成可執行程序app
gcc -c a.c -o a.o表示把源文件a.c編譯成指定文件名a.o的中間目標文件(其實在這里,把-o a.o省掉,效果是一樣的,因為中間文件默認與源文件同名,只是後綴變化)。
1、如果GCC不帶-C參數,編譯一個源代碼文件(test.c)。那麼會自動將編譯和鏈接一步完成,並生成可執行文件。可執行文件可以有-o參數指定(test.o)
2、如果是多個文件,則需要先編譯成中間目標文件(一般是.o文件),在鏈接成可執行文件,一般習慣目標文件都是以.o後綴,也沒有硬性規定可執行文件不能用.o文件。
(3)gcc編譯生成o程序擴展閱讀:
gcc:GNU編譯器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go語言的前端,也包括了這些語言的庫(如libstdc++、libgcj等等)。GCC的初衷是為GNU操作系統專門編寫的一款編譯器。GNU系統是徹底的自由軟體。此處,「自由」的含義是它尊重用戶的自由。
基本用法:
-o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。
-O,對程序進行優化編譯、鏈接,採用這個選項,整個源代碼會在編譯、鏈接過程中進行優化處理,這樣產生的可執行文件的執行效率可以提高,但是,編譯、鏈接的速度就相應地要慢一些。
4. linux下能生成兩種.o的文件 一個是我用gcc編譯生成的 另一個是makefile生成的,這倆一樣么
一樣的,makefile只是一個腳本,它實際調用的是gcc。
但你這里用「gcc -o helloword.o helloworld.c」調用的是linux(x86的)的標准gcc,而你的makefile腳本中的gcc版本是arm_v5t_le-gcc(是用在arm嵌入式處理器的)。兩個處理器不一樣,自然編譯出的helloworld.o不一樣,前者只能在x86電腦上運行,後者只能在arm嵌入式處理機中運行。
你把makefile中的「CC=arm_v5t_le-gcc」改成「CC=gcc」然後再make,之後肯定能運行。
5. gcc怎麼編譯.o
gcc中-c和-o是編譯時可選的參數
-加-c, (compile)只編譯生成中間同名目標文件,不鏈接
-加-o,(output)指定輸出文件名,該文件為可執行文件,不加-o會默認生成a.out
舉例:
gcc -c hello.c 編譯生成hello.o文件
gcc -o hello hello.c 生成可執行文件hello
6. linux下 為什麼要生成.o文件 .o文件和.c文件還有生成的可執行文件有啥區別啊
linux下.c只是簡單的文本文件,.o是編譯之後的二進制文件,操作方法如下;
1、首先在電腦中打開linux,然後安裝gcc g++編譯工具。