【发布时间】:2019-05-02 06:48:30
【问题描述】:
当我准备编译时
#include <math.h>
#include <stdio.h>
int main()
{
double m=1.66666;
double k=sqrtf(m);
return 0;
}
使用以下命令
/user/unicore/rs6000aix/compiler/gcc4.8.5/aix6.1/bin/gcc -o test.out test.cpp -lm
它抛出
ld: 0711-317 ERROR: Undefined symbol: .sqrtf
ld: 0711-345 使用 -bloadmap 或 -bnoquiet 选项获取更多信息。 collect2: error: ld 返回 8 退出状态
但下面的代码编译成功
#include <math.h>
#include <stdio.h>
int main()
{
double k=sqrtf(1.66666);
return 0;
}
我正在使用 gcc4.8.5 编译代码..相同的代码在 AIX6.1 上编译成功,但在新机器(AIX7.1)上失败
类似的问题已经存在:Why am I getting "undefined reference to sqrt" error even though I include math.h header? 但它对我不起作用。
更新:当我使用 sqrt 而不是 sqrtf 代码编译成功时,使用命令 '/user/unicore/rs6000aix/compiler/gcc4.8.5/aix6.1/bin/gcc -o test.out test.cpp -lm to compile it.sqrtf` 会失败,无论是否链接到数学库。
edit2:nm 命令的输出
$ nm -g -X32 /usr/lib/libm.a | grep sqrtf
.csqrtf T 512
csqrtf D 4196 12
$ nm -g -X64 /usr/lib/libm.a | grep sqrtf
.csqrtf T 512
csqrtf D 4296 24
编辑 3:bos.adt.libm.7.1.3.47 已安装但没有 sqrtf。安装bos.adt.libm.7.1.4.30.bff 并开始正常工作。
【问题讨论】:
-
你的代码没问题,但是把“%d”改成“%f”。 wandbox.org/permlink/Bfe2wuuplGWQl2RK
-
哈哈哈在这种情况下并不重要。忽略打印行。无论如何更新了代码。谢谢!
-
当然,不重要))) 但是代码没问题。
-
您可能没有安装包含
/usr/lib/libm.a--bos.adt.libm或类似内容的包。
标签: c++ unix linker aix math.h