You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

objdump显示函数名不一致致polynomialSub未定义问题咨询

问题分析与解答

这是C编译器的**名字修饰(Name Mangling)**机制导致的问题——C靠这个实现函数重载,编译器会把函数参数的类型信息编码进符号名里,保证不同参数列表的重载函数拥有唯一的符号标识。

先拆解你看到的符号差异:

  • 符号中的_i是int类型的参数编码,_s是short类型的参数编码
  • 你看到的符号遵循Itanium ABI标准(GCC、Clang等编译器常用),结构是:_Z开头,13是函数名polynomialSub的长度,后面依次是每个参数的类型编码:
    • PKxs代表const unsigned short*(P表示指针,K表示const,xs表示unsigned short)
    • 核心差异就在中间的参数:polynomial_arith.o里的函数定义有一个int类型参数(对应_i),但test.o里调用时依赖的函数声明中,该参数是short类型(对应_s)

出现这种情况的原因很明确:
你在polynomial_arith.cpp中定义polynomialSub时的参数类型,和test.cpp里调用该函数前的声明(通常在头文件里)的参数类型不一致——具体是其中一个参数,一个写了int,另一个写了short。而polynomialAdd能正常匹配,说明它的参数类型在定义和声明中完全一致,所以编译器生成的符号名也完全相同。

解决办法就是去核对头文件、polynomial_arith.cpp和test.cpp里polynomialSub的完整函数签名,确保所有参数的类型(包括const修饰、指针/引用、基础类型等细节)完全匹配。

内容的提问来源于stack exchange,提问作者user3078106

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:40:13