GNU CC(通常稱為GCC)是GNU項目的編譯器,他能夠編譯C、C++語言編寫的程序。 使用gcc,程序員可以對編譯過程有更多控制,編譯過程分為3個階段。 --預處理 --匯編 --鏈接 程序員可以在編譯的任何階段結束后體質整個編譯過程以檢查編譯器在該階段輸出的信息 使用gcc,程序員可以控制生成二進制執行文件中調試代碼的數量和類型。 和其他編譯器一樣,gcc也可以優化執行代碼 gcc是個交叉平台編譯器,所有能夠在當前CPU平台上為不同操作系統開發軟件 gcc對C和C++進行了一些擴展,有助於提高執行效率以及編譯器進行代碼優化。 gcc可以讓跨平台編程更加容易,將第代碼移植代價。
在命令行鍵入命令編譯和運行這段程序--gcc -o hello hello.c 這行命令告訴gcc對源程序hello.c進行編譯和鏈接,並使用參數-o指定創建名為hello的可執行程序。 "-o"設置輸出的文件名 整個過程看上去仿佛一氣呵成,但其實是分幾步的 --預編譯源代碼 --編譯目標代碼 --鏈接程序
預編譯 --在命令行鍵入命令 gcc -o hello1.c - E hello.c 這行命令告訴gcc對源程序hello.c進行預編譯,預編譯結果輸出到hello1.c文件中 "-E"表示預編譯 --預編譯:將頭文件的內容加載到hello.c文件中,形成新的文件hello1.c
編譯 --在命令行鍵入命令 gcc -o hello.o -c hellol.c 這行命令告訴gcc對源程序hello.c進行編譯,但不鏈接,編譯輸出到hello.o文件中。 --編譯:將預編譯好的文件編譯成二進制代碼,此時代碼中各個庫函數的實現還沒有,所以這個.o文件無法執行 --"-c"命令也可以直接將源文件hello.c編譯成.o文件的,不一定需要預編譯過的文件
鏈接 --在命令行鍵入命令 gcc -o hello hello.o 這行命令告訴gcc對源程序hello.o進行連接,生成可執行的hello --鏈接:把程序需要用到的庫文件加載進來,形成可執行文件 --注意:鏈接可以同時鏈接多個文件,例如:gcc -o hello hello.o add.o
開啟所有警告 --在命令行鍵入命令 gcc -o hello.o -c hello.c -Wall 這行命令告訴gcc對源程序hello.c進行編譯的同時,打印出警告信息
編譯C++源文件 --我們把hello.c文件改名為hello.cpp gcc -o hello.o -c hello.cpp --gcc沒有報錯 gcc -o hello hello.o --gcc報錯,說明是鏈接庫的時候出錯了 --gcc默認只鏈接c的標准庫,並不鏈接c++標准庫 在命令行鍵入命令:gcc -o hello hello.cpp -lstdc++ --編譯成功 --備注 -l是gcc的參數,表示鏈接指定的庫文件 stdc++是c++的庫文件libstdc++.so的簡寫,兩者之間不加空格 如果需要鏈接多個庫文件;語法是:gcc -o hello hello.cpp -lstdc++ -lstdc++ -lstdc++ --但是我們編譯c++一般不使用gcc,而是使用g++
gcc編譯選項 -D 代表一個宏,等同於在C語言中定義#define
例如 gcc -Wall -DWIN -o hello.o -c hello.c --"-DWIN"等同於#define WIN