当前位置: 首页 > 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.cnnetsun.cn/news/92132.html

相关文章:

  • # 深入 Ascend C 内存模型:掌握UB、GM与流水线优化,打造极致AI算子
  • 冥想第一千七百三十五天(1735)
  • 代理IP和普通IP有什么区别?这篇文章帮你捋明白
  • 体系结构分类和指令系统
  • 基于AI数字人系统源码的低成本开发方案与实践经验
  • SQL 调优全解:从 20 秒到 200 ms 的 6 步实战笔记(附脚本)
  • YOLO目标检测模型如何对接Apipost平台
  • 简单的创建一个Spring Boot网页
  • 鼠标滚轮缩放图片:前端实现高清无损放大技巧(附实战代码)
  • Numpy库实践2_索引和数组的操作
  • 图解 - 红黑树(插入)
  • Memgraph 全新 AI 图工具包:一键构建 GraphRAG 聊天机器人,实现快速上下文感知响应
  • 初始化列表和特殊成员
  • (二)前端基础框架构建
  • vLLM推理引擎教程6-Nsight Systems性能分析
  • 基于MATLAB的燃料电池汽车参数匹配与能量管理策略优化及仿真模型研究资料库
  • AM247L-0000伺服电机
  • DoraemonKit(DoKit)使用教程:从集成到实战
  • 构筑 AI 理论体系:深度学习 100 篇论文解读 第十九篇:序列建模的焦点——注意力机制 Attention Mechanism (2015)
  • 【小白笔记】移除元素与删除有序数组中的重复项与轮转数组(三步反转)
  • 什么是关键字驱动测试?
  • 前沿技术借鉴研讨-2025.12.16(超声心动图综述/妊娠期糖尿病/降低CTG解读主观性)
  • 别让发成绩,耗掉你课后的半小时
  • 企业级 Prompt 管理中心:实验分流 + 曝光埋点 + 可回溯,版本化/AB/DSL/可观测全齐
  • 执行 install.sh 报错 `env: ‘bash\r‘: No such file or directory` 怎么解决?
  • Part 10|我给这套系统划的第一个边界
  • agent-zh.md
  • 为什么过滤 rtmpt 而不是 rtmp?
  • Navicat x 达梦技术指引 | 启用和配置AI助手
  • Transformer的注意力权重的理解