ctypes CDLL的默认路径是什么?

时间:2018-09-19 08:50:07

标签: python linux python-2.7 ctypes

我正在尝试使用已编译为/usr/local/lib/libName.so的库,但是在运行需要此文件的python脚本时:

from ctypes import CDLL
[...]
__lib = CDLL('libName.so')

我得到:

OSError: libName.so: cannot open shared object file: No such file or directory

所以我想知道我需要在哪里复制.so文件,以便此CDLL调用正常工作。

1 个答案:

答案 0 :(得分:1)

ctypes [Python 3.5]: ctypes - A foreign function library for Python),使用 dlopen [man7]: DLOPEN(3))来加载库,该库委托加载(并隐式查找)任务发送到 Lnx 加载程序。

[man7]: LD.SO(8)中很好地解释了搜索 .so 的路径。这是默认值的说明:

  
      
  • 在默认路径 / lib 中,然后在 / usr / lib 中。 (在某些64位体系结构上,64位共享对象的默认路径是 / lib64 ,然后是 / usr / lib64 。)
  •   

解决问题的方法:

  1. 将完整路径传递到 CDLL
    • __lib = CDLL("/usr/local/lib/libName.so")
  2. 告诉加载程序还通过将其添加到 $ {LD_LIBRARY_PATH} env中,在 / usr / local / lib 中搜索 .so 。要加载它的 python 进程的var:
    • export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
    • LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib python
  3. 在默认的搜索路径之一中复制 .so (尽管我不建议这样做,但是如果需要的话,请改为将其复制到 / usr / lib / lib