news 2026/5/30 22:11:14

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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(共享库)中生成带有额外字符的函数名。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 20:29:02

TypedArray 详解

TypedArray 详解一、什么是 TypedArrayTypedArray 是 JavaScript 中处理二进制数据的对象,它提供了类似数组的视图来访问原始二进制缓冲区中的数据。核心特点:类型化:每个元素都有固定的数据类型(如 Int8、Uint32、Float64 等&…

作者头像 李华
网站建设 2026/5/29 4:11:44

JavaScript 中常用排序方法的性能对比和分析

一、原生数组排序方法 1. Array.prototype.sort() javascript // 默认排序(按字符串Unicode码点) arr.sort()// 自定义比较函数 arr.sort((a, b) > a - b) // 数字升序 时间复杂度: V8引擎:使用Timsort(归并插入…

作者头像 李华
网站建设 2026/5/29 19:42:08

实力见证 | 尚医云·小济医生入选2025广州市“隐形冠军”企业名单

10月28日,以“冠军力量澎湃动能”为主题的2025广州市“隐形冠军”企业新质发展招商投资大会隆重召开。在这场汇聚产业精英的盛会上,尚医云小济医生凭借在人工智能超声筛查领域的源头创新与落地成果,成功入选2025广州市“隐形冠军”企业。图源…

作者头像 李华
网站建设 2026/5/29 20:42:05

Cordova与OpenHarmony施肥记录管理

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。 施肥管理系统概述 施肥记录管理系统用于记录和追踪植物的施肥历史。在Cordova框架与OpenHarmony系统的结合下,我们需要实现一个完整的施肥管理系统,包括施肥记录的创建、…

作者头像 李华
网站建设 2026/5/29 19:19:44

娱乐or办公?何必二选一!移远云平板解决方案, 解锁智能终端新体验

在数字化生活与办公深度融合的今天,人们对于智能终端的需求日益多元——既希望拥有平板的便携与娱乐性,又需要电脑的高效生产力,同时追求性能、续航与体验的全面均衡。针对这一核心需求,移远通信重磅推出全新云平板解决方案。方案…

作者头像 李华