动态库使用方法

动态库使用方法 工作笔记

1: 怎么编译动态库 详细解释下各个参数的意义 动态库和静态库区别

生成共享库: gcc -share -fPIC -o xx.so ff.c

-share : 创建一个共享的目标文件

-fPIC : 指示编译器生成一个与位置无关的代码 使用共享库:

gcc -rdynamic -o app -ldl main.c

-ldl : 使用dl库提供的dlopen 等手动打开动态库 ,如果不手动打开,自然也可以像添加dl 这个库的形式添加需要使用的库

-rdynamic :

2: 如果一个app需要多个动态库和静态库,怎么添加它们?

#####添加多个静态库########

LD_FLAGS += -Wl,-Bstatic -Wl,--start-group \

-lsss \

-lsssss \

-lmd5 \

LD_FLAGS += -Wl,--end-group

########### DYN LIB ###################

LD_FLAGS += -Wl,-Bdynamic lskpm \

-lskshell

注意关键字

-Bstatic -Bdynamic -start-group --end-group

3: 如何查看动态库的依赖关系

在dlopen 打开库的过程中如果出现file no exit 的错误, 要注意查看库的依赖关系

4: 如何使用dlopen 这一系列函数, 在使用的过程中要注意什么?

添加-ldl 库

5: 实例分析

模块sktr069 依赖libevent dl 这两个库。 因为在sktr069 中调用了dlopen 来打开自己, 所以sktr060 必须是以动态库的形式集成到skapp 中, 在生成libsktr069.so 动态库的时候, 用了下面命令

$(CC) -fPIC -shared -o $@ $^

arm-hismall-linux-gcc -fPIC -shared -o libsktr069.so access_list.o accessor.o add_object.o

需要注意的是虽然libstr069.so 这个库中调用了libevent . dl 这两个库,但是在生成动态库的时候却不需要 添加这两个库,

在集成libsktr069.so的时候再链接这两个库就ok了。 其实仔细理解下编译过程,是很好理解的, 《深入理解计算机系统》 第七章上面有很好的解释参考资料http://www.blogjava.net/ThinkingTalking/archive/2010/07/07/325487.html------------------------------------------------------------------------------------------

注: 以上仅仅是在项目中使用到的。 原理等详细看《CSAPP》 第七章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值