一、gcc的編譯
預處理(pre-processing) E:插入頭文件,替換宏,將stdio.h文件中的內容插入到hello.c中
編譯(compliling) S:編譯成彙編代碼
彙編(Assembling) c:編譯成目標文件
鏈接(Linking):鏈接到庫中,變成可執行文件
1.gcc常用選項
o 生成目標
E 只運行C預編譯器(頭文件,宏等展開)
S 表示程序編譯期間,生成彙編語言文件後停止編譯(.s文件)
c 取消鏈接步驟,編譯源碼並最後生成目標文件
Wall 打開編譯告警
2.栗子
hello.c
#include<stdio.h>
int main(void)
{
printf("Hello World");
return 0;
}
預處理 gcc -E hello.c -o hello.i
編譯 gcc -S hello.i -o hello.s
彙編 gcc -c hello.s -o hello.o
鏈接 gcc hello.o -o hello
二、動態庫編譯與調用
1.編寫動態庫文件
func.c
#include <stdio.h>
void func(void)
{
printf("test dynamic lib \n");
}
2.編譯爲動態庫
gcc -c func.c -o func.o -fPIC
gcc func.o -o libfunc.so -shared
3.調用動態庫
main.c
#include <stdio.h>
void func(void);
int main(void)
{
func();
return 0;
}
gcc main.c -o main -L . -l func
./main
需要把動態庫文件放到/usr/lib/目錄下
三、靜態庫編譯與調用
1.編寫靜態庫文件
func.c
#include <stdio.h>
void func(void)
{
printf("test static lib \n");
}
2.編譯靜態庫文件
gcc -c func.c -o func.o
ar -crv libfunc.a func.o
3.調用靜態庫
main.c
#include <stdio.h>
void func(void);
int main(void)
{
func();
return 0;
}
gcc main.c -o main -L . -l func
./main