gcc簡單命令記錄

2021-07-04 13:49:24 字數 2345 閱讀 8105

一cc編譯程式過程分四個階段

1. 預處理

(pre

-processing)

2. 編譯

(compiling)

3. 彙編

(assembling)

4. 鏈結

(linking)

二.簡單編譯命令

我們以hello world程式來開始我們的學習.**如下:

/* hello.c */

#include

int

main

(void)

1. 執行如下命令:

$ gcc

-o hello hello.c

輸出:

hello

,world

!2. 我們也可以分步編譯如下:(1

) $

gcc

-e hello.c

-o hello

.i

//預處理結束

//這時候你看一下

hello.i

,可以看到插進去了很多東西.(

2) $ gcc

-s hello.i

//生成彙編**後結束(3

) $

gcc

-c hello.c

或者:$

gcc

-c hello.c

-o hello.o

或者:$

gcc

-c hello.i

-o hello.o

//編譯結束

//生成

hello.o檔案(

4) $ gcc hello.o

-o hello.o

或者:$

gcc

-o hello hello.c

//鏈結完畢,生成可執行**

3. 我們可以把幾個檔案一同編譯生成同乙個可執行檔案.

比如:乙個工程有main

.c foo

.c def

.c生成foo的可執行檔案.

編譯命令如下:

$ gcc -c

main

.c foo

.c def.c

-o foo

或者:$

gcc

-o foo

main

.c foo

.c def.c

三.庫依賴

函式庫是一些標頭檔案(.

h)和庫檔案(.

so或者.

a)的集合.

linux下的大多數函式都預設將標頭檔案放到/

usr/include/目錄下,而庫檔案則放到/

usr/

lib/目錄下,但並非絕對如此.因此gcc設有新增標頭檔案和庫檔案的編譯選項開關.

1. 新增標頭檔案:-

i例如在/

home

/work

/include/目錄下有編譯foo

.c所需標頭檔案def.h

,為了讓gcc能找到它們,就需要使用-

i選項:

$ gcc foo.c

-i /home

/work

/include/

def.h -

o foo

2. 新增庫檔案:-

l例如在/

home

/work

/lib

/目錄下有鏈結所需庫檔案libdef.so

,為了讓gcc能找到它們,就需要使用-

l選項:

$ gcc foo.c

-l /home

/work

/lib

-ldef.a

-o foo

說明:-

l選項指示gcc去連線庫檔案libdef.so

.linux下的庫檔案命名有乙個約定,即庫檔案以lib三個字母開頭,因為所有的庫檔案都遵循這個約定,故在用-

l選項指定鏈結的庫檔名時可以省去lib三個字母.

[題外語]

linux

下的庫檔案分為動態鏈結庫(.

so檔案)

和靜態鏈結庫(.

a檔案)

.gcc預設為動態庫優先,若想在動態庫和靜態庫同時存在的時候鏈結靜態庫需要指明為-

static選項.比如上例中如還有乙個libdef

.a而你想鏈結libdef

.a時候命令如下:

$ gcc foo.c

-l /home

/work

/lib

-static -

ldef.a

-o foo

Git命令簡單記錄

換工作也有一段時間了,由於最近在熟悉些新的專案,工作上不是太忙,主要是因為之前的工作中一直沒有使用git來進行 管理。但是現在身邊的同事都是在用git來進行 管理,而且作業系統也是之前從沒接觸過的烏班圖,所以git的操作基本上都是用命令來完成的。今天就將一些基本常用git命令做乙個簡單的記錄,方便自...

git patch 命令簡單記錄

1.補丁 1.1 單補丁 1.2 多補丁 2.檢查補丁 3.打入補丁 3.1 衝突補丁 有時候工作中常用的命令和不常用的命令,時間長了有些都忘了,整理簡單記錄一下 生成單個 commit id 補丁 git format patch commit id 1或 git format patch hea...

簡單的linux命令記錄

本次文章簡單記錄下linux常用的命令,以便後續查用,不喜勿噴 1 檔案相關 新建檔案 touch demo.txt 複製檔案 cp demo.txt demo2.txt 移動檔案 mv demo.txt demo2.txt 新建的sh指令碼許可權不夠 chmod x start.sh 檢視當前目錄...