linux 下同名符冲突的问题及解决办法


本文摘自PHP中文网,作者零下一度,侵删。

这篇文章主要介绍了 linux 下同名符号冲突问题解决方案的相关资料,需要的朋友可以参考下

linux 下同名符号冲突问题解决方案

最近的工作中遇到如下令人蛋疼的问题:

Linux 下有三个模块aa、bb、cc,基本情况如下:

cc 编译连接得到 cc.so 动态库,cc 中有如下接口:


1

2

3

4

5

6

cc_fun

{

……

do();//调用名为do的cc模块内部函数

……

}

bb 编译连接得到 bb.a 静态库,bb 中有如下接口:


1

2

3

4

5

6

7

8

9

bb_fun

{

……

handle = dlopen(cc.so, RTLD_LAZY);//加载cc.so

pccfun = dlsym(handle, “cc_fun”);//获取cc_fun函数指针

(*pccfun)();//调用cc_fun函数,此时应该会调用cc模块中的do()函数

do();//调用名为do的bb模块内部函数(与cc模块中的do()函数同名,实现却不相同)

……

}

aa 编译后通过 -lbb 链接选项的方式连接 bb.a 得到 aa 可执行程序,并调用 bb.a 的接口函数 bb_fun():


1

2

3

4

5

6

main

{

……

bb_fun();//调用bb_fun函数

……

}

工作中发现 aa 在运行时行为异常,总是有内存泄露和功能异常,通过定位发现问题集中在同名的 do() 函数上。通过输出打印发现程序中两次调用 do() 函数都调用到了 bb 模块中的 do() 函数,而 cc 模块中的 do() 函数从未被调用到,导致程序行为异常和内存泄露。

阅读剩余部分

相关阅读 >>

Linux如何查看服务

Linux远程桌面实现步骤

在云服务器 ecs上怎么修改一份自定义镜像的名称和描述

Linux中oracle中文乱码解决方法

ecs Linux服务器重启后数据丢失的解决方案

如何理解迁云工具和 p2v(physical to virtual)

Linux系统下如何运行.sh文件

如何安装Linux的flash

Linux中关于mkdir命令的详解

Linux配置文件在哪里

更多相关阅读请进入《Linux》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...