gcc的編譯及動態靜態庫的使用

一、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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章