在 Python 中使用 dlopen 加载一个 .so 表示在同一目录中找不到另一个

Agu*_*ans 2 python dlopen

我昨天使用 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))
Run Code Online (Sandbox Code Playgroud)

liu*_*ng1 5

@Charles Duffy 是对的。问题来自依赖关系。您可以通过命令验证这一点:

ldd libLMR_Demodulator.so
Run Code Online (Sandbox Code Playgroud)

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

  • 将所有的 lib 放到/lib,/usr/lib路径中,或者直接将它们安装到您的系统中。
  • 将库的路径放到/etc/ld.so.conf文件中,然后运行ldconfig以刷新缓存。
  • 用于LD_LIBRARY_PATH添加库的路径,然后尝试运行您的脚本

    LD_LIBRARY_PATH=[..path] python [script.py]
    
    Run Code Online (Sandbox Code Playgroud)

或者

    export LD_LD_LIBRARY_PATH=[..path]
    python [script.py]
Run Code Online (Sandbox Code Playgroud)

您可以查看手册dlopen以获取更多详细信息。