python - 加载的dll的路径是什么?

标签 python dll ctypes dllimport

我正在 Cygwin 下使用 ctypes 加载一个 dll,其中包含以下内容:

import ctypes
ctypes.cdll.LoadLibrary('foo.dll')

如何获取我的dll的绝对路径?

问题是我完全不知道 dll 的位置。我可以联系以下内容以获取此信息吗?

subprocess.Popen(["which", lib], stdout=subprocess.PIPE).stdout.read().strip()

最佳答案

在 Unix 中,加载共享库的路径可以通过使用库中符号(例如函数)的地址调用 dladdr 来确定。

示例:

import ctypes
import ctypes.util

libdl = ctypes.CDLL(ctypes.util.find_library('dl'))

class Dl_info(ctypes.Structure):
    _fields_ = (('dli_fname', ctypes.c_char_p),
                ('dli_fbase', ctypes.c_void_p),
                ('dli_sname', ctypes.c_char_p),
                ('dli_saddr', ctypes.c_void_p))

libdl.dladdr.argtypes = (ctypes.c_void_p, ctypes.POINTER(Dl_info))

if __name__ == '__main__':
    import sys

    info = Dl_info()
    result = libdl.dladdr(libdl.dladdr, ctypes.byref(info))

    if result and info.dli_fname:
        libdl_path = info.dli_fname.decode(sys.getfilesystemencoding())
    else:
        libdl_path = u'Not Found'

    print(u'libdl path: %s' % libdl_path)

输出:

libdl path: /lib/x86_64-linux-gnu/libdl.so.2

关于python - 加载的dll的路径是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44453489/

相关文章:

python - 如何从 Python 中的列表列表中删除超集列表?

c# - 如何在 VS2010 中从另一个 DLL 调试一个 DLL

visual-c++ - 阻止 .lib 中的 dllexport 函数从 DLL 导出

python - 如何在使用 <iostream> 的 Python 中调用 C++ 代码

python - 如何通过 __in 过滤另一个模型对象列表

python - 如何使用 CSV 文件数据创建图表?

c# - 获取 C# dll 进程模块

python - 将 C 结构转换为 ctypes.Structure 的工具?

Python:kernel32.CreateProcessA() 它在做什么?

python - 如何在 QML 中将 @pyqtSlot 装饰器与其他装饰器一起使用?