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
相关产品推荐
相关产品推荐

