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語句中,最好對某個物件只有...