C代码链接动静态库的链接
这边勒,是本人第一次在网上写东西,用于总结,自己学习的知识
- C编译过程
通常初学在使用gcc编译器编译C程序时最常用的方法有两种gcc main.c
这种方式会在当前路径下生成一个a.out文件(可执行)
china@ubuntu:~/share/lib$ ls
main.c
china@ubuntu:~/share/lib$ gcc main.c
china@ubuntu:~/share/lib$ ls
a.out main.c
china@ubuntu:~/share/lib$
链接库首先需要建立库一下是对静态库与动态库的创建
库怎么来勒?就需要你创建你要链接的东西 (通常是函数)
china@ubuntu:~/share/lib$ ls
lib.c lib.h main.c
china@ubuntu:~/share/lib$
其中lib.c中是定义了一个函数
lib.h是lib.c的头文件
.c中的函数在lib.h中声明
介绍一个知识点:想要生成库 首先必须要将lib.c这个文件生成.o文件
china@ubuntu:~/share/lib$ ls
lib.c lib.h main.c
china@ubuntu:~/share/lib$ gcc -c lib.c
china@ubuntu:~/share/lib$ ls
lib.c lib.h lib.o main.c
china@ubuntu:~/share/lib$
好的.o文件已经生成
接下来基于.o文件生成动静态库
- 静态库
使用指令
ar -crv libsum.a lib.o
china@ubuntu:~/share/lib$ ls
lib.c lib.h lib.o libsum.a main.c
china@ubuntu:~/share/lib$
好的静态库已经声明成功
其中必须注意:ar -crv libsum.a lib.o 中 lib表示库 sum是库名 .a为后缀
- 链接库
lib.c lib.h lib.o libsum.a main.c
china@ubuntu:~/share/lib$ gcc main.c -o main -L. -I. -lsum
china@ubuntu:~/share/lib$ ls
lib.c lib.h lib.o libsum.a main main.c
链接完成 生成可执行文件
注意:
1 main.c 里面一定要包含#include"lib.h"
2 -L. 表示L是必须要加的表示库 后面紧接着就是库的路径 由于我将libsum.a就是放在当前文件夹下的所以是 -L.
3 -I. 表示L是必须要加的表示头文件 后面紧接着就是头文件的路径 由于我将lib.h就是放在当前文件夹下的所以是 -I.
4 -lsum -l表示链接 sum表示库名
- 动态库
生成库的方法
```c
china@ubuntu:~/share/lib$ gcc -shared -fpic -o libsum.so lib.o
china@ubuntu:~/share/lib$ ls
lib.c lib.h lib.o libsum.a libsum.so main main.c
china@ubuntu:~/share/lib$
libsum.so 就是动态库
- **链接动态库**
链接动态库和使用动态库与使用静态库一致
同时一定要注意注意事项
**- 主要注意事项**
可能你按照我的步骤 你都做了 但是他出现了
./a.out
: error while loading shared libraries
: libsum.so: cannot open shared object file
: No such file or directory
你需要以下操作
```c
sudo vim /etc/profile
打开文件之后将你的路径给添加到最后一行
例如:
export PATH+$PATH:/home/china/share/lib
2021年3月28日 1:12
辛丑(牛)二月十六