首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用ctype从libm.so.6加载__log_finite

无法使用ctype从libm.so.6加载__log_finite
EN

Stack Overflow用户
提问于 2022-05-24 13:32:33
回答 1查看 89关注 0票数 0

我正在尝试使用__log_finitelibm.so.6加载函数ctypes

如果在库上运行nm,我可以看到符号引用了一个间接函数(https://sourceware.org/binutils/docs/binutils/nm.html)。

代码语言:javascript
复制
nm -gD libm.so.6 | grep __log_finite
000000000002c520 i __log_finite

当我尝试用python中的ctype加载这个函数时,我会得到一个错误,表明没有定义符号:

代码语言:javascript
复制
import ctypes
lib = types.CDLL("/usr/lib/x86_64-linux-gnu/libm.so.6")
func = lib.__log_finite

提出:

代码语言:javascript
复制
AttributeError: /usr/lib/x86_64-linux-gnu/libm.so.6: undefined symbol: __log_finite

如果我尝试加载任何其他非间接函数,则不会得到以下错误:

代码语言:javascript
复制
nm -gD libm.so.6 | grep roundevenl
000000000001cc20 W roundevenl
代码语言:javascript
复制
func = lib.roundevenl
print(func)

输出

代码语言:javascript
复制
<_FuncPtr object at 0x7fbea6820400>

我想知道这是怎么回事,以及这种行为的原因。这与__log_finite或所有间接函数有关吗?

注:这个问题似乎与间接函数无关,而与有限后缀有关:我无法加载任何*_finite函数(例如,__acos_finite__expf_finite.)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-13 09:04:14

我认为这个问题是由于删除了glibc > 2.31中的各种_finite函数定义。在我的例子中,通过添加-fno-finite-math-only编译标志(如建议的这里 )解决了这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72363848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档