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