我昨天使用SSH协议连接到另一台计算机,并尝试通过Python加载一个SO文件(将编译为C)。这是我在CLI中得到的:
“OSError:”旁边正在请求的文件(libLMR_Demodulator.so)与我要加载的文件(libDemodulatorJNI_lmr.so)位于同一目录中。
python代码(v3.5.2)如下:
import ctypes
sh_obj = ctypes.cdll.LoadLibrary('./libLMR_Demodulator.so')
actual_start_frequency = sh_obj.getActualStartFrequency(ctypes.c_long(0))
print('The Current Actual Frequency Is: ' + str(actual_start_frequency))
@Charles Duffy是对的。问题来自依赖。您可以通过命令验证:
ldd libLMR_Demodulator.so
您有几种方法可以解决此问题:
/lib
,/usr/lib
路径,或直接将它们安装到您的系统中。/etc/ld.so.conf
文件中,然后运行ldconfig
来刷新缓存。LD_LIBRARY_PATH
添加libs的路径,然后尝试运行脚本
LD_LIBRARY_PATH=[..path] python [script.py]
要么
export LD_LD_LIBRARY_PATH=[..path]
python [script.py]
您可以查看dlopen
手册以获取更多详细信息。
我到这里寻找如何确保具有.so文件的模块/包能够加载它所依赖的另一个.so文件 - 将当前目录更改为第一个.so文件的位置(即,模块所在的目录似乎对我有用:
import os,sys,inspect
cwd = os.getcwd()
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
os.chdir(currentdir)
import _myotherlib
os.chdir(cwd) # go back
也可能适用于OP案例?