我的环境: Ubuntu 18.04,Anaconda,Python 3.6
我使用以下代码通过ctype在python中导入libm,以便更改浮点类型环境,例如舍入。
import numpy as np
import ctypes
FE_TONEAREST = 0x0000
FE_DOWNWARD = 0x0400
FE_UPWARD = 0x0800
FE_TOWARDZERO = 0x0c00
#libm = ctypes.CDLL("libm.so", ctypes.RTLD_GLOBAL)
libm = ctypes.cdll.LoadLibrary(r'/usr/lib/x86_64-linux-gnu/libm.so')
v = 1. / (1<<23)
print( repr(np.float32(1+v) - np.float32(v/2))) # prints 1.0
#change mode
libm.fesetround(FE_UPWARD)
print( repr(np.float32(1+v) - np.float32(v/2))) # prints 1.0000002然而,我得到了以下错误:
Traceback (most recent call last):
File "mode.py", line 10, in <module>
libm = ctypes.cdll.LoadLibrary(r'/usr/lib/x86_64-linux-gnu/libm.so')
File "/anaconda/envs/phat/lib/python3.6/ctypes/__init__.py", line 426, in LoadLibrary
return self._dlltype(name)
File "/anaconda/envs/phat/lib/python3.6/ctypes/__init__.py", line 348, in __init__
self._handle = _dlopen(self._name, mode)
OSError: /usr/lib/x86_64-linux-gnu/libm.so: invalid ELF headerlibm是ubuntu 18.04附带的默认库。
你能告诉我导入库的最好方法是什么吗?
谢谢。
发布于 2021-02-23 16:48:23
我已经更改了库路径
从…
/usr/lib/x86_64-linux-gnu/libm.so
至
/lib/x86_64-linux-gnu/libm.so.6
啊,真灵。
https://stackoverflow.com/questions/66329222
复制相似问题