目录

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下寻找,我们可以把我们自己的动态库放到这个路径下,然后执行可执行文件就会进行动态链接。