当前位置: 首页 > news >正文

【c++】——c++编译的so中函数有额外的字符

0. 代码

// cintadd(inta,intb){returna+b;}

用gcc编译成动态库,并用nm看函数名字。

gcc -shared -fPIC -o libtest.so add.c nm -D --defined-only ./libtest.so|grep-E"[Tt]"0000000000201020 B __bss_start 0000000000201020 D _edata 000000000000056c T _fini 0000000000000460 T _init 0000000000000555 Tadd

用g++编译成动态库,并用nm看函数名字

g++ -shared -fPIC -o libtestc++.so add.c nm -D --defined-only ./libtestc++.so|grep-E"[Tt]"0000000000000555 T _Z3addii 0000000000201020 B __bss_start 0000000000201020 D _edata 000000000000056c T _fini 0000000000000468 T _init

如果要g++编译动态的名字不变,需要加上以下代码

// add.h#ifdef__cplusplusextern"C"{intadd(inta,intb);}#endif// add.c#include"add.h"intadd(inta,intb){returna+b;}

1. 原因

这个是 C++ 的名字修饰(Name Mangling) 机制导致的,是 C++ 为了支持函数重载、命名空间、类成员函数等特性,而对函数名进行的特殊编码,最终会在编译后的 SO(共享库)中生成带有额外字符的函数名。

http://www.zskr.cn/news/111689.html

相关文章:

  • 从工具到思维:构筑持续测试的文化基石
  • 清理linux大文件
  • Unity场景后处理小记 - 实践
  • 【Android驱动14】Android系统Crash工具使用方法和分析
  • HTR3236 36路LED PWM驱动器全方位介绍
  • 出国点餐看不懂菜单?别慌!用微信“扫一扫”就能搞定
  • PMSM永磁同步电机电控设计高手晋级之路:高清视频,深度解析,技术细节一网打尽
  • Flutter 性能优化实战:从 60fps 到丝滑如原生的 120fps
  • 私有部署+全能定制!开源投票系统分享 小程序投票+H5投票二合一
  • 全能小微企业报告API接口调用代码流程、接入方法以及应用场景
  • 降本增效利器!这款洗车小程序源码助您轻松搭建管理平台
  • 三相锁相环(SRF-PLL)并网逆变器 Matlab Simulink仿真
  • 调研分享 | 面向异构集群环境的分布式训练并行方案调研
  • MSWOA算法,基于多策略混合改进鲸鱼算法 Matlab语言 改进后测试函数结果显示,相较与W...
  • 【青岛理工】25年计网期末A卷回忆版
  • Memgraph 全新 AI 图工具包:一键构建 GraphRAG 聊天机器人,实现快速上下文感知响应
  • [特殊字符]名企研学|走进比亚迪!解锁新能源汽车的未来密码[特殊字符][特殊字符]
  • 51单片机数字电压表
  • 开源替代SaaS:一次部署长期受益,多维表格自建方案全解析
  • STL中容器适配器:stack,queue,priority_queue 的介绍与简单模拟实现
  • 【光学】基于九个光谱波段多光谱成像系统食品质量评估(范围为400nm-1000nm)附Matlab代码
  • 电影解说文案:LobeChat写出爆款短视频脚本
  • 【源码开源】基于STM32的应急救援仓系统 | 救援效率和实时监控
  • 考虑寿命损耗的微网电池储能容量优化配置 关键词:两阶段鲁棒优化 KKT条件 CCG算法 寿命损耗
  • Modbus TCP关键知识点回顾
  • nVisual模块之间关系
  • 【PFJSP问题】基于混沌增强领导者黏菌算法CELSMA求解置换流水车间调度问题PFSP附Matlab代码
  • AI Agent学习:MetaGPT之我的工作
  • ICEEMDAN+PE+小波降噪重构(改进自适应噪声完备集合经验模态分解+排列熵+小波降噪重构)
  • 赋能多门店运营!这款二手车小程序系统如何实现车源与客户的统一高效管理