使用dlopen加载一个。所以在Python中,它在同一个目录中找不到另一个

2024-10-01 00:17:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我昨天使用SSH协议连接到另一台计算机,并尝试通过Python加载一个SO文件(将编译成C)。以下是我在CLI中得到的信息: enter image description here

正在请求的文件(libLMR_解调器)“OSError:”旁边的目录与我要加载的文件位于同一个目录中(libdemodularjni_左室右室). 在

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))

Tags: 文件目录obj协议clisosh计算机
2条回答

我在这里寻找如何确保带有.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

可能对手术也有用吗?在

@查尔斯·达菲是对的。问题来自于依赖关系。您可以通过以下命令进行验证:

ldd libLMR_Demodulator.so

有几种方法可以解决此问题:

  • 将所有lib放到/lib/usr/lib路径,或直接将它们安装到系统中。在
  • 将libs的路径放入/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的手册以获取更多详细信息。在

相关问题 更多 >