一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 檢視當前目錄...