gpt4 book ai didi

c++ - 快速数学导致对 `__pow_finite' 的 undefined reference

转载 作者:行者123 更新时间:2023-12-03 07:05:23 24 4
gpt4 key购买 nike

在 ubuntu 20.04 上,当我使用 clang-8 或 clang-9(clang 版本 9.0.1-12)编译包含对 libm 的引用的简单代码时,它将失败并显示错误“ undefined reference __pow_finite

#include <math.h>

int main()
{
double x=1, y=1;
x = pow(x,y);
}
clang-9 -lm test.c -ffast-math
/usr/bin/ld: /tmp/test-9b1a45.o: in function `main':
test.c:(.text+0x2a): undefined reference to `__pow_finite'

readelf -Ws /lib/x86_64-linux-gnu/libm.so.6| grep pow_finite
626: 000000000002ed90 65 IFUNC GLOBAL DEFAULT 17 __pow_finite@GLIBC_2.15

gcc 没问题。知道这里有什么问题吗?

C++ 也有同样的问题:
#include <cmath>

int main()
{
double x=1, y=1;
x = pow(x,y);
}

编辑

我实际上使用了-lm,我只是忘记放入文本。如果我不添加它,则是另一个错误。
$ clang-9 test.c
/usr/bin/ld: /tmp/test-3389a6.o: in function `main':
test.c:(.text+0x25): undefined reference to `pow'

$ gcc test.c
/usr/bin/ld: /tmp/cc21n4wb.o: in function `main':
test.c:(.text+0x39): undefined reference to `pow'

F31没有这个问题。 godbolt也不错。一定是系统或特定的颠覆出了问题。

到目前为止顺序无关紧要,所以我认为不是 gcc will not properly include math.h :
clang-9 test.c -ffast-math -lm
/usr/bin/ld: /tmp/test-6dfc29.o: in function `main':
test.c:(.text+0x2a): undefined reference to `__pow_finite'

clang-9 -ffast-math test.c -lm
/usr/bin/ld: /tmp/test-6754bc.o: in function `main':
test.c:(.text+0x2a): undefined reference to `__pow_finite'


将 ld 改为 collect2 也有同样的问题,所以应该不是 ld 的问题。
clang-9 -v -fuse-ld=/usr/lib/gcc/x86_64-linux-gnu/9/collect2 test.c -ffast-math -lm

更新

似乎与 libc update有关.没有 math-finite.h没有了,所以当 -ffast-math生成 __*finite它会失败。叮当要 change its behaviour .

最佳答案

编译时添加头文件,clang -L/home/xiaokuan/lib/glibc-2.32-install/lib -I/home/xiaokuan/lib/glibc-2.32-install/include -lm -ffast-math a.c

关于c++ - 快速数学导致对 `__pow_finite' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62334452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com