一,gcc編譯器詳解

2021-07-05 12:20:39 字數 3846 閱讀 6075

一,gcc

編譯器詳解

linux 系統中最重要的軟體開發工具是 

gcc,在 

linux 

系統中,

c89、

cc 和 

gcc 

這些命令基本上都指向系統的

c語言編譯器,通常是

gnu c

編譯器,或都簡稱 

gcc。在 

unix 

系統中,

c 語言編譯器稱為 

cc。實際上,

gcc 

能夠編譯三種語言:c、

c++ 

和 object c(c 

語言的一種物件導向擴充套件)。利用 

gcc 

命令可同時編譯並連線 

c 和 

c++ 

源程式,一般來說,

c 編譯器通過原始檔的字尾名來判斷是 

c 程式還是 

c++ 

程式。在 

linux 

中,c 

原始檔的字尾名為 

.c,而 

c++ 

原始檔的字尾名為 

.c 或 

.cpp

。對於 

c++ 

程式,gcc 

命令只能編譯 

c++ 

原始檔,而不能自動和 

c++ 

程式使用的庫連線。因此,通常可以使用 

g++ 

命令來完成 

c++ 

程式的編譯和連線,該程式會自動呼叫 

gcc 

實現編譯。

gcc是乙個原本用於

unix

系統下程式設計的編譯器。不過,現在

gcc也有了許多

win32

下的移植版本。所以,也許對於許多

windows

開發者來說,

gcc還是乙個比較陌生的東西。

目前gcc

在windows

下有三個移植版本:

mingw

、cygwin

和djgpp

。筆者對

mingw

比較熟悉,而其它

2個沒怎麼用過。本文主要講述如何安裝和配置

mingw

。mingw是

minimalistic gnu for windows 

的縮寫。它是乙個建立在

gcc和

binutils 

專案上的編譯器系統。和其他

gcc的移植版相比,它可以說是最接近

win32

的乙個了。因為,

mingw

幾乎支援所有的

win32 api

,這也是

mingw

的特色之一。它所連線的程式,不需要任何第三方庫就可以執行了。在某種程度上看,

mingw

更像是vc

的替代品。

gcc-core:

c語言編譯器,目前有2、

3、4三個版本,推薦使用最新的。 

gcc-g++:

c++語言編譯器,版本同上。(可選

)  binutils:

mingw

的彙編器和聯結器等基礎工具。  

mingw32-make:

make

工具,用以管理你的專案。 

gdb:

mingw

偵錯程式。 

win32api:

win32

的api

函式標頭檔案和連線庫  

mingw-runtime:

mingw

的執行時庫

命令選項的作用: 

1.  -o place the output into 

如:#gcc -o file file.c

-o 告訴編譯器將可執行程式放在何處,如果沒有指定檔名稱,編譯器則會把程式放在乙個名為

a.out

的檔案裡(

a.out

的含義是 

assembler output

,即彙編輸出)。

2. -c  compile and assemble, but do not link  

如:#gcc -c file.c

-c 告訴編譯器僅把源**編譯為目標模組(

file.o

)而跳過彙編和連線的步驟。在使用

-c生成目標模組後,就可以通過

-o選項來生成可執行檔案。如

:#gcc -o file file1.o file2.o 

可以是多個目標模組。

3. -l和-l

指示編譯器程式要鏈結的庫。其中-l

要增加庫的搜尋路徑。如:

hello.so

動態庫放在

/usr/cprimer

目錄下,那就是 

-l/user/cprimer 

4. -o 

如:#gcc file.c -o2,

用來優化程式用的。優化程式,執行速度可能也有所提高,從未真正測試過。

5. -include

-include 告訴編譯器需要包含標頭檔案,但一般情況下包含標頭檔案都在原始碼裡用

#include ******

實現,一般很少用這個選項

shell命令

ldd作用:用來檢視程式執行所需的共享庫,

常用來解決程式因缺少某個庫檔案而不能執行的一

些問題。

ldd命令原理

1、首先

ldd不是乙個可執行程式,而只是乙個

shell

指令碼;2、

ldd能夠顯示可執行模組的

dependency

,其原理是通過設定一系列的環境變數,如:

ld_trace_loaded_objects

、ld_warn

、ld_bind_now

、ld_library_version

、ld_verbose

等。當ld_trace_loaded_objects

環境變數不為空時,任何可執行程式在執行時,它都會只顯示模組的

dependency

,而程式並不真正執行。可以在

shell

終端測試一下:

(1) export ld_trace_loaded_objects=1

(2) 再執行任何的程式,如

ls等,看看程式的執行結果

3、ldd

顯示可執行模組的

dependency

的工作原理,其實質是通過

ld-linux.so

(elf

動態庫的裝載器)來實現的。我們知道,

ld-linux.so

模組會先於

executable

模組程式工作,並獲得控制權,因此當上述的那些環境變數被設定時,

ld-linux.so

選擇了顯示可執行模組的

dependency

。4、實際上可以直接執行

ld-linux.so

模組,如:

/lib/ld-linux.so.2 --list program

(這相當於

ldd program)。

gcc編譯器命令使用詳解

1。gcc 包含的c c 編譯器 gcc,cc,c g gcc和cc是一樣的,c 和g 是一樣的,沒有看太明白前面這半句是什 麼意思 一般c程式就用gcc編譯,c 程式就用g 編譯 2。gcc的基本用法 gcc test.c這樣將編譯出乙個名為a.out的程式 gcc test.c o test這樣...

Linux安裝gcc編譯器詳解

本人使用的是centos 6.5 64位系統,由於在安裝系統的時候並沒有勾選安裝gcc編譯器,因此需要自行安裝gcc編譯器。對於配備了yum的linux發行版而言,安裝gcc編譯器就變得so easy。我們只需要分別執行如下命令即可 安裝gcc c 編譯器以及核心檔案 yum y install g...

C 語言編譯器 gcc 命令詳解

linux 系統中最重要的軟體開發工具是 gcc,在 linux 系統中,c89 cc 和 gcc 這些命令基本上都指向系統的c語言編譯器,通常是gnu c編譯器,或都簡稱 gcc。在 unix 系統中,c 語言編譯器稱為 cc。實際上,gcc 能夠編譯三種語言 c c 和 object c c 語...