有关g++的-rdynamic选项

选项 -rdynamic 用来通知链接器将所有符号添加到动态符号表中 
(目的是能够通过使用 dlopen 来实现向后跟踪) 
-rdynamic 
Pass the flag ‘-export-dynamic’ to the ELF linker, on targets that support 
it. This instructs the linker to add all symbols, not only used ones, to the 
dynamic symbol table. This option is needed for some uses of dlopen or to 
allow obtaining backtraces from within a program. 
  
比如日志系统,主程序里使用一套日志系统,dlopen方式打开的libso里无法使用。编译时加上这个参数,不需要增加任何代码就可以使代码通用。 
  
网上搜到上面的说法 
没看太明白 
是不是可以理解为 
我现在有 A.o  B.so 
然后我可以g++ -rdynamic A.o B.so -shared -o C.so 
然后我用C.so的时候 可以不必依赖B.so了? 
我试了试 貌似这个选项不生效啊 
还是说 对B.so有什么限制? 
  
还是说 只是将符号表全部添加进去 而不是只添加实现的那部分符号表? 这有什么好处? 
  
其实我的需求是这样的 
我原来用了开源的ACE  我本机编译时没问题 
现在一发布时  我都要写个脚本去创建libACE.conf 指明ACE的路径 
我嫌麻烦(自己到是不麻烦,主要是公司实施员工水平不行,经常连脚本都不会运行) 
所以我现在期望能程序启动时 直接运行 
我代码里有一部分需要使用到ACE 具体的说 就是继承并实现了ACE_Task 
这导致我的工程必须在编译时需要 -lACE 
有什么办法  能让我运行时 不修改系统任何配置就能加载libACE.so? 
我在stackoverflow上问了下  有个回帖的说用-rdynamic  但我试了试  好像只导入符号表  没有把实现链接进去 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值