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

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

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

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

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

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

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

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

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():

main { …… bb_fun();//调用bb_fun函数 …… }

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

后经多方查证了解到因为 linux 程序中各个库中的符号表最终都会加载到程序所在的全局符号表中,此时如果有同名符号就只能调用到第一个加载进来的符号,也就是说后边加载的同名符号都会被之前的覆盖。cc 模块中的 do() 函数被 bb 模块中的 do() 函数覆盖了,所以无法被调用到。

废话不多说。。。

在试验过很多不满意的方法之后,最终的解决方法如下:

1.在 cc 的 makefile 中加入 -Wl,-Bsymbolic -Wl,–version-script,version 的连接选项,意思是用 version 文件中的脚本指定其导出哪些函数。

2.version 文件的实现如下:

VERS{ global: cc_fun; local: *; };

意思是指定 cc 模块只导出接口函数 cc_fun,其余函数都设为 local 不做导出。

将该文件保存在 makefile 所在目录即可。

3.重新编译连接三个模块,问题解决。

以上就是linux 下同名符冲突的问题及解决办法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/190786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
驱动人生如何查找最新驱动?驱动人生查找最新驱动的实用技巧
上一篇 2026年9月7日 04:46:50
如何搭建支持WebSocket的PHP容器 PHP实时通信容器部署方法
下一篇 2025年12月10日 09:04:46

相关推荐

  • linux下tomcat的使用方法简介

    这篇文章主要介绍了linux下tomcat常用操作,需要的朋友可以参考下 假设tomcat安装在/usr/local/tomcat7 启动tomcat cd /usr/local/tomcat7/bin./startup.sh 查看启动状态 ps -ef|grep javaroot 3729 172…

    用户投稿 2026年9月7日
    000
  • VSCode怎么恢复结果窗口_VSCode输出面板显示与隐藏管理教程

    VSCode恢复结果窗口,其实就是找回或调整你的“输出”面板。它可能因为误操作被关闭了,或者你需要更方便地查看程序的运行结果。下面详细说说怎么搞定它。 输出面板显示与隐藏管理教程: 如何快速找回消失的VSCode输出面板? 最简单的方法就是使用快捷键。 Ctrl + J (Windows/Linux…

    2026年9月7日
    100
  • 关于linux下建站目录分配权限的示例代码分享

    在建站的时候给目录分配权限是非常重要的,也是建站的程序员们必须要会的,下面这篇文章主要给大家总结了在linux下建站目录分配权限的经验技巧,需要的朋友可以参考借鉴,下面来一起看看吧。 前言 在网上搜索网站文件夹权限配置一般都是是: 文件夹权限最小权限755 文件最小权限644 文件的可读可写可执行很…

    用户投稿 2026年9月7日
    000
  • 路由器192.168.1.253的账号密码忘记了怎么办?初始是多少?

    忘记路由器192.168.1.253的账号密码时,最直接有效的解决方法是将路由器恢复出厂设置,具体操作为:在通电状态下,使用牙签或回形针长按机身上的reset按钮5到10秒,直至指示灯闪烁或重启,重置后所有设置将被清除;2. 重置后可使用路由器背面标签上的默认账号密码(如admin/admin或ad…

    2026年9月7日
    000
  • 如何在Linux系统中利用node.js提取Word及PDF文本内容的案例介绍

    这篇文章主要给大家介绍了关于linux系统中利用node.js提取word(doc/docx)及pdf文本的内容,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面跟着小编来一起看看吧。 前言 想要做全文搜索引擎,则需要将word/pdf等文档内容提取出来。对于pdf有xpdf等一些开源方案。…

    用户投稿 2026年9月7日
    000
  • Windows10上安装Linux子系统(WSL2,Ubuntu),配合Windows Terminal使用,还要什么自行车

    Windows10上安装Linux子系统(WSL2,Ubuntu),配合Windows Terminal使用,还要什么自行车Windows10上安装Linux子系统(WSL2,Ubuntu),配合Windows Terminal使用,还要什么自行车Windows10上安装Linux子系统(WSL2,Ubuntu),配合Windows Terminal使用,还要什么自行车Windows10上安装Linux子系统(WSL2,Ubuntu),配合Windows Terminal使用,还要什么自行车

    linux 的 windows 子系统可让开发人员按原样运行 gnu/linux 环境 – 包括大多数命令行工具、实用工具和应用程序 – 且不会产生传统虚拟机或双启动设置开销。 WSL 说白了安装Linux就是基于WSL,之前WSL 1 我没使用,现在WSL 2 了于是试了下…

    2026年9月7日 用户投稿
    200
  • Linux系统中关于网卡设置的教程

    这篇文章主要介绍了linux系统网卡的设置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 由于做了虚拟机的克隆,发现克隆机和被克隆机的MAC地址相同了,下面我将要介绍一下linux中网卡的配置步骤,我使用的linux是CentOS release 6.9 (Final) 1、root用户编辑…

    2026年9月7日
    000
  • Linux Shell编程的实例教程

    awk [-field-separator] ‘commands’ input-file(s) 基本模式 awk -F’:’ …  使用#分隔 awk ‘{print $0}’ a.txt  立即进入“豆包AI人工智…

    用户投稿 2026年9月7日
    100
  • Linux 文件大小 文件夹大小 磁盘大小

    du -sh 查看当前文件夹下文件与文件夹大小; df -hl 查看磁盘空间大小;   参考文献:www.cnblogs.com/adolfmc/archive/2013/02/16/2913801.html   以上就是Linux 文件大小 文件夹大小 磁盘大小的详细内容,更多请关注创想鸟其它相关…

    用户投稿 2026年9月7日
    100
  • .NET Core 3.1和WorkerServices构建Windows服务

    asp.net core 3引入了worker service这一有趣功能。作为一个asp.net core模板,它允许开发者创建托管长期运行的后台服务。这些服务通过实现ihostedservice接口来定义后台任务逻辑,被称为“托管服务”。它们可以部署在windows服务以及linux守护程序中。…

    2026年9月7日
    200
  • VCS博客

    版本控制:高效协作的利器 版本控制系统(VCS)是追踪文件随时间变化的软件工具,它能显著提升开发团队的协作效率。 集中式版本控制系统 (CVC): 这类系统将项目所有版本存储于服务器端的单一中心位置。开发者需从中心位置获取代码,完成修改后再提交回中心。 示例: Subversion、Perforce…

    2026年9月7日
    100
  • linux配置静态ip地址上外网的实例讲解

    linux配置静态ip地址上外网的实例讲解linux配置静态ip地址上外网的实例讲解linux配置静态ip地址上外网的实例讲解linux配置静态ip地址上外网的实例讲解

    1、查看网络 # ifconfig 发现网络还没有配置,ping不通 2、修改网卡配置文件 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 添加如下配置:  ONBOOT=yes BOOTPROTO=static IPADDR=IP地址 NETMASK…

    2026年9月7日 用户投稿
    500
  • Java中的数据结构(四):时间轮

    一、前言 在最近学习elastic-job和xxl-job(一个分布式作业调用中间件)时,我接触到一个有趣的数据结构:时间轮。不仅是xxl-job,在许多任务调度中间件或涉及延迟/定时任务的场景中,都能看到时间轮的应用。那么,为什么时间轮在这些时间调度相关的场景中如此受欢迎呢?让我们一起来探究其中的…

    2026年9月7日
    100
  • Linux系统怎么查看版本信息?

    1、输入”uname -a “,可显示电脑以及操作系统的相关信息。 $ uname -aLinux hadoop02.zjl.com 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64…

    用户投稿 2026年9月6日
    000
  • Linux系统网卡怎么设置?

    由于做了虚拟机的克隆,发现克隆机和被克隆机的mac地址相同了,下面我将要介绍一下linux中网卡的配置步骤,我使用的linux是centos release 6.9 (final) 1、root用户编辑/etc/udev/rules.d/70-persistent-net.rules文件,找到mac…

    2026年9月6日
    200
  • linux system intstall VGA driver

      1.AMD   $ sudo apt-get install  fglrx   2.Nvidia $ sudo apt-get install nvidia-current     —————–installed after…

    用户投稿 2026年9月6日
    300
  • VM下扩容Linux要注意的问题

    扩容两步走: 第一步卷扩容 第二步文件系统扩容   需要注意的是不同Linux发行版本,文件格式有所不同 xfs用  xfs_growfs /dev/vg_dc01/lv_root ext3用  resize2fs /dev/vg_dc01/lv_root    是时候给苍老师安排换个新房子 :) …

    用户投稿 2026年9月6日
    400
  • MySQL数据清洗与转换实战_Sublime处理批量字段标准化脚本流程

    MySQL数据清洗与转换实战_Sublime处理批量字段标准化脚本流程MySQL数据清洗与转换实战_Sublime处理批量字段标准化脚本流程MySQL数据清洗与转换实战_Sublime处理批量字段标准化脚本流程MySQL数据清洗与转换实战_Sublime处理批量字段标准化脚本流程

    使用sublime text进行mysql字段批量标准化的核心流程包括:①导出schema或数据样本;②定义标准化规则;③利用多光标、列选择和正则替换进行批量编辑;④生成alter table或update语句;⑤审查测试后执行sql脚本。其优势在于文本处理灵活、可控性强、轻量高效,适用于高度定制化…

    2026年9月6日 用户投稿
    400
  • linux系统

    信号 fly@UBT:~/$ kill -l 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) S…

    用户投稿 2026年9月6日
    100
  • ubuntu_linux /boot/grub/grub.conf解析

    ==========================================ubuntu  /boot/grub/grub.conf文件========================================== ## DO NOT EDIT THIS FILE## It is au…

    用户投稿 2026年9月6日
    200

发表回复

登录后才能评论
关注微信