我正在尝试使用__log_finite从libm.so.6加载函数ctypes。
如果在库上运行nm,我可以看到符号引用了一个间接函数(https://sourceware.org/binutils/docs/binutils/nm.html)。
nm -gD libm.so.6 | grep __log_finite
000000000002c520 i __log_finite当我尝试用python中的ctype加载这个函数时,我会得到一个错误,表明没有定义符号:
import ctypes
lib = types.CDLL("/usr/lib/x86_64-linux-gnu/libm.so.6")
func = lib.__log_finite提出:
AttributeError: /usr/lib/x86_64-linux-gnu/libm.so.6: undefined symbol: __log_finite如果我尝试加载任何其他非间接函数,则不会得到以下错误:
nm -gD libm.so.6 | grep roundevenl
000000000001cc20 W roundevenlfunc = lib.roundevenl
print(func)输出
<_FuncPtr object at 0x7fbea6820400>我想知道这是怎么回事,以及这种行为的原因。这与__log_finite或所有间接函数有关吗?
注:这个问题似乎与间接函数无关,而与有限后缀有关:我无法加载任何*_finite函数(例如,__acos_finite、__expf_finite.)
发布于 2022-09-13 09:04:14
我认为这个问题是由于删除了glibc > 2.31中的各种_finite函数定义。在我的例子中,通过添加-fno-finite-math-only编译标志(如建议的这里 )解决了这个问题。
https://stackoverflow.com/questions/72363848
复制相似问题