c++编译后的函数名- .cpp文件编译成.o文件后,函数名称的变化

    技术2025-09-02  3

    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

     

    Processed: 0.009, SQL: 9