linux在内存加载so文件,linux.调用dll & .so库引用

本文详细介绍了动态库与静态库的编译及使用方法,包括动态库的加载原理、查找规则及编译步骤,静态库的编译过程和使用规则,并对比了两者的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

main()

{

void handle=dlopen("./libdemo4.so",RTLD_LAZY);

void(fun)(int)=dlsym(handle,"diamond");

fun(5);

dlclose(handle);}

使用libdl.so库

动态库加载的原理

动态库中函数的查找已经封装成库libdl.so

dlopen 打开一个动态库

dlsym 在打开动态库找一个函数

dlclose 关闭动态库

//dlerror 返回错误

注意了

动态库是可以执行,静态库不能执行

但动态库没有main,不能独立执行。

动态库不会连接成程序的一部分。

程序执行的时候,必须需要动态库文件。

ldd 察看程序需要调用的动态库

ldd 只能察看可执行文件.

readelf -h 察看执行程序头.

nm 察看库中的函数符号

3.动态库的编译

3.1.编译

-c -fpic(可选)

3.2.连接

-shared

4.使用动态库

gcc 代码 动态库文件名

gcc 代码 -l库名 -L动态库所在路径

标准命名规则:

lib库名.so

lib库名.a

-l 库名 -L 库所在路径

大深坑:

4.1.执行程序怎么加载动态库?

4.2.动态库没有作为执行程序的一部分,为什么连接需要指定动态库以及目录?

连接器需要确定函数在动态库的中的位置

动态库的加载:

1.找到动态库

2.加载动态库到内存

3.映射到用户的内存空间

系统对动态库查找规则:

/lib

/usr/lib

到环境变量LD_LIBRARY_PATH指定的路径中查找

三.静态库的编译

1.编译过程(*.a achieve)

1.1.编译成目标文件

-static 可选

gcc -c -static 代码文件.c

1.2.归档成静态库

ar工具

ar -r

-t

ar -r 静态库文件 被归档的文件

nm工具(察看函数符号表)

nm 静态库或者动态库或者目标文件或者执行文件

1.3.使用静态库

gcc 代码 静态库

结晶步骤:

1.函数等代码封装的二进制已经编译的归档文件

2.ar归档方式 库的方式

3.编译好的程序运行的时候不依赖库。库作为程序的一部分编译连接。

4.文件集合(归档)

5.库命名规则 注意了:

lib库名.a.主版本号.副版本号.批号

lib库名.a

库使用规则

-l 库名

-L 库所在目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值