gcc生成链接库
目录
C语言中.h头文件作用
.h
头文件只是用来声明一些东西,编译的时候并不参与编译
生成.o可执行文件
在一个多文件的C语言项目中,需要将多个.o
可执行文件链接起来称为一个二进制可执行文件,这样才可以执行
比如下面
hello.h
hello.c
void echo(char *msg);
#include "hello.h"
#include <stdio.h>
void echo(char *msg)
{
printf("%s\n", msg);
}
util.h
util.c
int add(int n1, int n2);
#include "util.h"
int add(int n1, int n2)
{
return n1 + n2;
}
main,c
#include <stdio.h>
#include "util.h"
#include "hello.h"
int main(int argc, char const *argv[])
{
int n1 = 1, n2 = 2;
int n3 = add(n1, n2);
printf("%d+%d=%d\n", n1, n2, n3);
echo("hello,world\n");
return 0;
}
编译的时候我们只需要将所有其他文件编译为.o
文件,然后再和main.c
一起编译链接即可
clean:
rm -f util.o hello.o my.a main.o
build:
gcc -c util.c -o util.o
gcc -c hello.c -o hello.o
gcc -c main.c -o main.o
gcc main.o util.o hello.o -o main
创建.a静态库
我们可以讲多个.o
文件打包为一个.a
静态库文件,这样就方便传输和编译了
ar rsc my.a *.o
然后直接把这个.a
静态库和main.c
进行编译即可
gcc main.c my.a -o main
创建.so动态链接库
首先编译一个动态链接库
gcc util.c hello.c -shared -o libmy.so
然后将libmy.so
和main进行编译
gcc -o main main.c -L . -l my #-L . 表示动态库在当前路径下 -l my则会寻找 libmy.so的动态库
编译之后需要执行,执行时会到指定路径寻找动态库的地址,默认在/usr/lib
下寻找,我们可以把我们自己的动态库放到这个路径下,然后执行可执行文件就会进行动态链接。