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

void func(void)
{
    printf("test dynamic lib \n");
}

2.编译为动态库

gcc -c func.c -o func.o -fPIC

gcc func.o -o libfunc.so -shared

gcc的编译及动态静态库的使用_第1张图片

3.调用动态库

main.c

#include 
  
void func(void);

int main(void)
{
    func();
    return 0;
}

gcc main.c -o main -L . -l func

./main

需要把动态库文件放到/usr/lib/目录下

gcc的编译及动态静态库的使用_第2张图片

三、静态库编译与调用

1.编写静态库文件

func.c

#include 
  
void func(void)
{
    printf("test static lib \n");
}

2.编译静态库文件

gcc -c func.c -o func.o

ar -crv libfunc.a func.o

gcc的编译及动态静态库的使用_第3张图片

3.调用静态库

main.c

#include 
  
void func(void);

int main(void)
{
    func();
    return 0;
}

gcc main.c -o main -L . -l func

./main

gcc的编译及动态静态库的使用_第4张图片

你可能感兴趣的:(linux)