Linux技術——gcc基礎
GNU CC(通常稱為GCC)是GNU專案的編譯器,它能夠編譯C、C++語言編寫的程式。
gcc是Linux開發的基礎,gcc能夠支援多種不同的C語言版本,同時提供Linux、Unix、Windows下的編譯版本。
使用gcc,程式設計師可以對編譯過程有更多的控制,編譯過程分為3個階段。
–預處理;
–彙編;
–連結;
使用gcc,程式設計師可以控制生成二進位制執行檔案中除錯程式碼的數量和型別。
和其他編譯器一樣,gcc也可以優化執行程式碼。
gcc是個交叉平臺編譯器,所以能夠在當前CPU平臺上為不同作業系統開發軟體。
gcc對C和C++進行了一些擴充套件,有助於提高執行效率以及編譯器進行程式碼優化。
gcc可以讓跨平臺程式設計更加容易,降低程式碼移植代價。
深入瞭解gcc之前,我們先看一個小例子。
#include <stdio.h>
int main(int arg, char *args[])
{
if (arg < 3)
printf("請輸入2個引數\n");
else
{
int a = atoi(args[1]);
int b = atoi(args[2]);
printf("%d 加 %d 等於 %d\n", a, b, a + b);
}
return 0;
}
在命令列鍵入命令編譯和執行這段程式
$gcc -o hello hello.c
這行命令告訴gcc對源程式hello.c進行編譯和連結,並使用引數-o指定建立名為hello的可執行程式。
整個過程看上去彷彿是一氣呵成的,但其實是分幾步的
–預編譯原始碼;
–編譯目的碼;
–連結程式。
預編譯
在命令列鍵入命令。
$gcc -o hello1.c -E hello.c
這行命令告訴gcc對源程式hello.c進行預編譯,預編譯結果輸出到hello1.c檔案中。
編譯
在命令列鍵入命令。
$gcc -o hello.o -c hello1.c
這行命令告訴gcc對源程式hello.c進行編譯,但不連結,編譯輸出到hello.o檔案中。
連結
在命令列鍵入命令。
$gcc -o hello hello.o
這行命令告訴gcc對源程式hello.o進行連結,生成可執行程式hello。
gcc各個選項的意思:
-o filename 輸出檔名,如果沒指定filename,預設為a.out
-c 只編譯,不連結
-E 預編譯
-S 彙編
-g 包含除錯資訊
-I 指定包含標頭檔案路徑
-D 編譯時定義指定的巨集,相當於原始碼中的#define巨集定義
-L 指定要連結庫檔案的路徑
-l 連結指定的庫檔案
-O 優化編譯後的程式碼
-w 關閉所有告警資訊
-Wall 開啟所有告警資訊
-Werror Warning當做錯誤處理
-static 強制連結時連結靜態庫
-fPIC 編譯與位置無關的程式碼,主要用於編譯共享庫
-shared 生成共享庫so檔案
-pedantic 發現一些不符合 ANSI/ISO C標準的程式碼
gcc是如何知道檔案型別呢?
通過副檔名判斷檔案型別
c C語言原始檔
cpp C++原始檔
s 組合語言原始檔
o 編譯後的目的碼檔案
a,so 編譯後的庫檔案
相關文章
- 如何以零基礎快速學習Linux運維技術?Linux技術Linux運維
- docker容器技術基礎之linux cgroup、namespaceDockerLinuxnamespace
- 零基礎可以自學Linux嗎?Linux技術學習Linux
- Linux技術基礎都需要學什麼?Linux運維學習Linux運維
- 零基礎能學linux技術嗎?linux系統學習Linux
- 音視訊技術基礎
- JavaGUI——繪圖技術基礎JavaGUI繪圖
- Docker 技術基礎之 CGroupsDocker
- 前端技術演進(一):Web前端技術基礎前端Web
- 現代通訊技術基礎中的基礎
- Linux技術零基礎可以學嗎?學linux運維看什麼書Linux運維
- Lynx技術分析-JS引擎擴充套件技術基礎JS套件
- Docker | Docker技術基礎梳理(一)Docker
- 網路通訊技術基礎
- 前端技術面——(js基礎一)前端JS
- 前端技術面——(js基礎二)前端JS
- 伺服器RAID技術基礎伺服器AI
- 技術day01 ──SQL基礎SQL
- Windows下基礎免殺技術Windows
- 學習Linux運維技術的都有哪些人?運維基礎Linux運維
- 技術基礎 | Apache Cassandra 4.0基準測試Apache
- Linux下GCC降低版本 gcc 4.4.6LinuxGC
- Linux升級GCCLinuxGC
- 容器技術之Docker基礎入門Docker
- 虛擬化技術之kvm基礎
- 技術基礎 | 重要指標和告警指標
- 淺談RASP技術攻防之基礎篇
- java框架基礎技術之--------反射機制Java框架反射
- Java安全基礎之Java Web核心技術JavaWeb
- 0基礎小白如何學習Python技術?Python
- HCNA Routing&Switching之交換技術基礎
- ProBuilder快速原型開發技術 ---操作基礎UI原型
- linux基礎Linux
- JDBC基礎入門教程,輕鬆掌握jdbc基礎+核心技術,超全面!JDBC
- Docker | Docker技術基礎梳理(二) - 映象管理Docker
- Spring Boot:從炒作到成熟的基礎技術?Spring Boot
- OpenStack關鍵技術系列: Libvirt基礎知識
- 4.路由器設計技術基礎路由器
- 0基礎學Web前端要掌握哪些技術?Web前端