✅<1>主页::我的代码爱吃辣
<2>知识讲解:Linux——动静态库
☂️<3>开发环境:Centos7
<4>前言:我们之前了解过一点点动静态库,今天系统了解一下。
目录
一.生成静态库
1.准备工作
2.打包库
3.如何使用库
3.1指定路径和库名称
3.2放入系统库文件,和头文件目录下
二.生成动态库
1.打包库
2.如何使用库
3.查找动态库
3.1环境变量方案(临时)
3.2硬连接或者拷贝到系统目录下
3.3配置文件方案
见一见库:
库的存放位置一般在,/lib64/或者/usr/lib64下。
手写几个简单函数,将其打包成静态库。
add.c
#include "add.h"
int add(int a, int b)
{
return a + b;
}
add.h
#pragma once
int add(int a, int b);
sub.c
#include "sub.h"
int sub(int a, int b)
{
return a - b;
}
sub.h
#pragma once
int sub(int a, int b);
mian.c
#include
#include "add.h"
#include "sub.h"
int main()
{
printf("%d\n", add(20, 10));
printf("%d\n", sub(20, 10));
return 0;
}
生成静态库,需要使用汇编之后的.o的二进制目标文件。使用
gcc -c
ar是gnu归档工具,rc表示(replace and create)。
打包库:
使用命令
ar -rc [libmymath.a]
libmymath.a是库的名称,库的命名格式是:
lib+真是库名+.a,lib代表这是一个库,中间是哭的名称,.a代表静态库。
如果我们直接对main.c文件使用gcc编译 :
会发现,编译器还是找不到库,所以这里的会有链接错误,add,sub,未定义。
指定库和库的所在路径:
gcc -o main mian.c -L [路径] -l [库名]
这次生成的是静态库,即使我们删除库本身,可执行程序依旧可以继续跑。
创建include和lib文件夹,将.h文件放进include文件夹中,将.o文件放进lib文件夹中。
直接指定头文件夹,库文件夹,库名称:
gcc -o main main.c -I [头文件路径] -L [库文件路径] -l [库名称]
也可以直接将include和lib放进系统的目录下:
将头文件放进/usr/include下,将库文件放进/lib64下。
gcc 自带打包动态库的功能:
生成与位置无关码
使用命令:
gcc -fPIC -c [.c文件]
打包成动态库
使用命令:
gcc -shared -o [库名] *.o
创建include和lib文件夹,将.h文件放进include文件夹中,将.o文件放进lib文件夹中。
使用命令:
gcc -o main main.c -I [头文件路径] -l[库名] -L [库路径]
说明:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[库的路径]
/etc/ld.so.conf.d/目录下的文件用来指定动态库搜索路径。这些文件被包含在/etc/ld.so.conf文件中,ldconfig命令会在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索可共享的动态链接库,并创建出动态装入程序(ld.so)所需的连接和缓存文件。