A. gcc -c ch01.c -o main與gcc ch01.c -o main 有什麼區別 為什麼前者編譯出來的執行文件不能運行
加-c是編譯不鏈接,生成的是目標文件,-o和-c一起用就是把這目標文件改名輸出成main而已。
單加-o就是編譯且鏈接輸出成執行文件。
B. gcc -o main main.cpp 和 gcc main.cpp -o main 有什麼區別啊
依賴於g++對命令行參數的解析方式。-o main是選項,第1種是標准用法,與ls -l <file> 和 ls <file> -l是一樣的意思。
這沒有語法角度,-o main main.cpp或者 main.cpp -o main都是參數,直接影響g++程序中argc和argv參數。比如g++ -o main main.cpp,最終傳到g++的main函數中 main(int argc, char **argv)的參數是:argc:4, argv: {"g++", "-o", "main" "main.cpp"},argv是一個字元串數組,第個元素表示一個命令行參數,argc表示命令行參數的個數。g++去解析這些命令行參數,如果想一探究竟,直接查閱源碼就OK。
不建議使用後一種。使用man g++可以查看標准使用方式。
C. gcc怎麼編譯.o
gcc中-c和-o是編譯時可選的參數
-加-c, (compile)只編譯生成中間同名目標文件,不鏈接
-加-o,(output)指定輸出文件名,該文件為可執行文件,不加-o會默認生成a.out
舉例:
gcc -c hello.c 編譯生成hello.o文件
gcc -o hello hello.c 生成可執行文件hello
D. (linux)gcc進行優化編譯的參數是什麼
將file.c文件編譯產生可執行文件myprog(-o選項),並且在編譯的時候,生成調試信息(-g信息)。讓gdb調試器可以調試該程序。
gcc是編譯器程序名字
-o是可執行文件名字輸出參數
-g是插入調試信息參數
當然是調試可執行文件myprog
E. gcc. g++ 編譯後生成的.O文件有何不同
從總體來看,沒什麼不同,都是
文件頭、段表、段內容這樣的一個格式。
往內容來看,兩者有區別的,g++是把文件當C++,gcc是把文件當作C。首先是符號生成規則(name mangling)不一樣,還有就是連接的庫也不一樣。
F. gcc -o是什麼意思
gcc在windows下有很出名的,從Linux下轉過來的(gcc原來是linux下的) 叫MinGW
MinGW是指只用自由軟體來生成純粹的Win32可執行文件的編譯環境。
-o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。
一般語法:
gcc filename.c -o filename
上面的意思是如果你不打 -o filename 那麼默認就是輸出filemame.out.這個-o就是用來控制輸出文件的。
G. linux 怎麼編譯c的源程序的gcc,編譯命令是什麼
在Linux下面,如果要編譯一個C語言源程序,我們要使用gcc編譯器。
先將源文件編譯成目標文件:gcc - c hello.c
生成hello.o文件,再將目標文件編譯成可執行文件:gcc -o hello hello.o
如:
int main(int argc,char **argv)
{
printf("Hello Linux ");
}
(7)gcc命令編譯加o參數的區別擴展閱讀:
在使用GCC編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,這里只介紹其中最基本、最常用的參數。具體可參考GCC Manual。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。
網路_gcc
H. linux下用gcc編譯出的可執行文件和.o的編譯文件有什麼區別
.o 是可重定位目標程序, 雖然打包了機器語言指令,但它還需要和其它的庫(比如你用的printf())做鏈接,最終生成可執行目標文件,這樣才可能被載入到內存中由系統執行.
你的程序里用到printf(),但你自己並沒有實現它,實現在系統的庫文件中,因此可鏈接後才能用嘛.
I. gcc命令求詳解!!!!
1. 把 foo.c 編譯為目標文件 foo.o
2. 把 main.c 編譯為目標文件 main.o
3. 把 目標文件main.o和 foo.o 編譯為可執行文件 simple
make 會 分析 makefile
發現 第一個文件依賴關系all:main.o foo.o
是 gcc -o simple main.o foo.o
即 simplie是由 main.o foo.o連接在一起得到的
接著他會往下找 main.o 和foo.o 各自的依賴關系
發現
main.o:main.c
gcc -c main.c -o main.o
即main.o是 由 main.c 編譯而來的
接著又發現
foo.o:foo.c
gcc -c foo.c -ofoo.o:foo.c
gcc -c foo.c -o foo.o
即foo.o 是 由foo.c 編譯而來的
所以
編譯順序 如開頭所說的那樣