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

Objective-C中pow()函数的使用方法及链接错误解决

Objective-C中pow()函数链接错误解决方法

我用19种语言实现了增长率与利率的相互转换逻辑,都用到了pow()函数(或对应运算符),唯独Objective-C这里出了问题。

直接在NSLog里调用pow的代码能正常运行:

NSLog(@"Pow = %f", pow(1.03, 0.5));

但把pow封装成方法就跑不起来:

- (double) pot: (double) value exponent: (double) e {
    return pow(value, e);
}

报错信息如下:

/usr/sbin/ld: /tmp/ccYQw9Wv.ltrans0.ltrans.o: undefined reference to symbol 'pow@@GLIBC_2.29'
/usr/sbin/ld: /usr/lib/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

解决办法

这是链接阶段的问题,pow()属于数学库libm.so,编译时得手动指定链接这个库。

如果用clang或gcc编译,在命令末尾加上 -lm 参数就行,比如:

clang your_file.m -o your_program -framework Foundation -lm

直接调用时编译器可能做了优化自动链接了libm,但封装成方法后就没这个自动处理,必须显式加-lm把数学库链接进去,就能解决符号未定义的问题。

内容的提问来源于stack exchange,提问作者Ricardo Erick Rebêlo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:14:57