c++编译后的函数名 - .cpp文件编译成.o文件后,函数名称的变化
发布日期:2021-06-29 14:21:08 浏览次数:3 分类:技术文章

本文共 899 字,大约阅读时间需要 2 分钟。

ar::start::initial:start(int a,int b),经过编译成.o后,变成了什么名称?

 

c++编译后的函数名

c++源代码,编译时,函数名会被编译器修改,变成编译器内部的名字(名字规则由编译器定义)。

修改后的名字,会在链接时用到。

linux g++,翻译规则:

每个方法都是以_Z开头,对于嵌套的名字(比如名字空间中的名字或者是类中间的名字,比如Class::Func)后面紧跟N , 然后是各个名字空间和类的名字,每个名字前是名字字符的长度,再以E结尾。(如果不是嵌套名字则不需要以E结尾)

 

c++filt 工具,将编译后的函数名,翻译成源码函数名

 

实例:

源码:

TunApplication_base.cc:(.text+0x40c): undefined reference to `vkn::com::Runtime::getInstance()

include/vkn/com/runtime.h

  /*!

    * \brief Returns an instance of Runtime class
    * \return Runtime instance
    */
  static Runtime& getInstance();

二进制库:

objdump -D libvkn.a

0000000000002464 <_GLOBAL__sub_I__ZN3vkn3com7Runtime11getInstanceEv>:

    2464:       a9bf7bfd        stp     x29, x30, [sp, #-16]!
    2468:       910003fd        mov     x29, sp
    246c:       529fffe1        mov     w1, #0xffff                     // #65535
    2470:       52800020        mov     w0, #0x1                        // #1
    2474:       97ffff2a        bl      211c <_Z41__static_initialization_and_destruction_0ii>
    2478:       a8c17bfd        ldp     x29, x30, [sp], #16
    247c:       d65f03c0        ret

 

转载地址:https://chilaidashi.blog.csdn.net/article/details/107125659 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:项目构建工具 - CMake (5)库文件的生成,外部库的导入 - add_library
下一篇:项目构建工具 - CMake (4)自定义宏

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月14日 04时23分25秒