返回信息流需要使用名为libabc.so的动态库,于是发现两种方法均可。
一种是在Makefile中增加-labc的编译选项。
第二种是在代码中使用dlopen的方式显示打开libabc.so。
这种方法均可实现对libabc.so的加载。
但是有什么区别呢?
在什么情况下,只能用-l而不能用dlopen;而又在什么情况下只能用dlopen不能用-l(我的意思是,调用libabc.so时,这种方法是否等价)
这是一条镜像帖。来源:北邮人论坛 / cpp / #86088同步于 2015/3/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[linux C++] -l 和dlopen是什么区别?
HappenKing1
2015/3/22镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
目前只知道dlopen可以根据配置文件,在运行时选择不同名字的so动态库。除了这种情况呢?可以混用吗?
【 在 zx723 的大作中提到: 】
: 不等价的,当动态绑定时会有不同。
【 在 HappenKing1 的大作中提到: 】
: 目前只知道dlopen可以根据配置文件,在运行时选择不同名字的so动态库。除了这种情况呢?可以混用吗?
还有在dynamic_resolve时的结果跟so的加载顺序有关呀。喜欢动态装载,就用dlopen嘛,就像很多工具的插件一样,用时装上,用完还可以卸载。-lm就不行了啊
大神 dynamic_resolve 是什么啊,我找不到...
【 在 zx723 的大作中提到: 】
:
: 还有在dynamic_resolve时的结果跟so的加载顺序有关呀。喜欢动态装载,就用dlopen嘛,就像很多工具的插件一样,用时装上,用完还可以卸载。-lm就不行了啊
比如dlopen()的应用场景:
libabc.so中f()函数有升级,程序通过dlclose()/dlopen()就可以在不用重启情况下完成f()升级
【 在 HappenKing1 的大作中提到: 】
: 需要使用名为libabc.so的动态库,于是发现两种方法均可。
: 一种是在Makefile中增加-labc的编译选项。
: 第二种是在代码中使用dlopen的方式显示打开libabc.so。
: ...................
【 在 xq253738191 的大作中提到: 】
: 肯定要重启啊,不重启怎么加载新的so啊,只不过不需要编译了
dlopen以后,还是可以dlclose的。所以...可以不需要重启