c編譯整理

2021-06-22 18:12:12 字數 1080 閱讀 1138

1. 測試**

/*  main.c  */

#include "hello.h"

int main(void)

/*  hello.h */

#ifndef hello_h

#define hello_h

void hello(const char *name);

#endif

/* hello.c */

#includevoid hello(const char *name)

2.makefile

#makefile

cc=gcc

cflage=-g -wall

targets=hello

all: $(targets)

hello: hello.o main.o

.phony: clean

clean:

rm -rf *.o $(targets)

3. .a 靜態庫(打包檔案)

.c 未經過預處理的c原始碼

.h c標頭檔案   

.i 經過預處理的c原始碼

.o 編譯之後產生的目標檔案

.s 生成的組合語言**

.so 動態庫(動態鏈結庫)

$ gcc -e hello.c -o hello.i  生成預處理後的檔案 hello.i

$ gcc -s hello.c -o hello.s  生成組合語言檔案 hello.s

$ objdump -s hello.o 檢視 hello.o 的二進位製碼

4.靜態鏈結庫

ar rc libmyhello.a hello.o

gcc -o hello main.c libmyhello.a

ar -t libmyhello.a 檢視靜態庫包含的檔案

5.動態鏈結庫

gcc -shared -fpic -o libmyhello.so hello.c

C語言編譯過程(整理)

c語言編譯過程 c語言的編譯鏈結過程要把我們編寫的乙個c程式 源 轉換成可以在硬體上執行的程式 可執行 需要進行編譯和鏈結。編譯就是把文字形式源 翻譯為機器語言形式的目標檔案的過程。鏈結是把目標檔案 作業系統的啟動 和用到的庫檔案進行組織形成最終生成可執行 的過程。過程 如下 從圖上可以看到,整個 ...

c語言整理編譯預處理

c程式執行過程 源程式 編譯預處理 編譯 優化程式 匯程式設計序 鏈結程式 可執行檔案。編譯預處理時,先要讀取源程式,對預處理指令 開頭指令 以及特殊的符號進行處理,比如define 替換指令,也會進行刪除注釋,多餘的空白字元,然後產生的預處理檔案或者程式傳給編譯器,在程式中以 開頭的編譯指令稱為預...

C語言預編譯 巨集的整理

define null 0 define null null pointer 0 上面的重定義是相同的,但下面的重定義不同 如果多次定義時,再次定義的巨集內容是不同的,gcc會給出 name redefined 警告資訊.應該避免重新定義函式巨集,不管是在預處理命令中還是c語句中,最好對某個物件只有...