当前位置: 首页 > 面试题库 >

使用ctypes从共享库映射全局变量

鲜于德泽
2023-03-14
问题内容

我想使用ctypespbs_errno在库中映射一个声明为全局值的int值libtorque.so

目前,我可以像这样加载库:

from ctypes import *
libtorque = CDLL("libtorque.so")

并成功映射了许多功能。但是,出于错误检查的目的,其中许多设置了pbs_errno变量,因此我也需要访问该变量。但是,如果我尝试访问它,则会得到:

>>> pytorque.libtorque.pbs_errno
<_FuncPtr object at 0x9fc690>

当然,它不是函数指针,尝试调用它会导致段错误。

int pbs_errno;在主头文件和extern int pbs_errno;API头文件中声明为。

Objdump将符号显示为:

00000000001294f8 g    DO .bss   0000000000000004  Base        pbs_errno

问题答案:

ctypes文档中有一节关于访问dll中导出的值:

http://docs.python.org/library/ctypes.html#accessing-values-exported-from-
dlls

例如

def pbs_errno():
    返回c_int.in_dll(libtorque,“ pbs_errno”)


 类似资料:
  • 问题内容: 我正在从python脚本中调用一个so文件。据我了解,我真的不需要释放使用ctypes在python中打开的共享库。但是,在我的so文件代码中,它dlopen另一个so文件并且不执行dlclose()。在这种情况下,从python端使用安全吗?我不必释放在ctypes内部加载的共享库soe文件吗? 问题答案: 始终遵循 “自己清洁后清理 ”的规则(尽管现代技术会为您提供清洁方面的帮助)

  • 问题内容: 考虑以下简单代码: 当child增加myvar时,该值是否与父亲共享(如pthread)? 问题答案: 不,是的。 不,它们不会以程序员可见的任何方式共享;进程可以独立地修改自己的变量副本,并且它们将在不影响其他进程(例如fork()父,兄弟姐妹或后代)的情况下进行更改。 但是,是的,OS实际上最初确实共享页面,因为fork实现了写时复制功能,这意味着只要没有任何进程修改页面,就可以共

  • 我看到“Dart是一种单线程编程语言”,所以我认为使用全局变量在函数之间传递数据安全吗 我还看到“Dart提供隔离”,并且可以在多核上运行。这意味着如果不同的分离株访问相同的全局变量,这可能是危险的,对吧? 安全吗?如果没有,有什么方法可以在函数之间共享对象,而不将它们作为参数传递呢? 更新: 根据“Florian Loitsch”的回答,我刚刚写了一个关于隔离的全局变量的测试: 您可以看到一个隔

  • 问题内容: 我试图通过ctypes用Python中定义的回调替换共享库中的现有函数指针。 C中共享库的源代码: Python脚本的来源: 测试它的脚本: 我得到的输出: 因此,似乎在Python(plotxy)中定义的函数是type ,而在C中定义的函数指针是type 。尽管应用了替换in ,但在调用main函数时似乎没有任何效果。 除了阅读https://docs.python.org/3/li

  • 问题内容: 我只想在进程与该进程调用的dll之间共享静态/全局变量。exe和dll在相同的内存地址空间中。我不希望在其他进程之间共享该变量。 问题的阐述: 说是有一个静态/全局变量在。exe 和dll 都具有,因此变量都在两个图像中。 现在,动态加载(或静态)。然后,问题是该变量是否由exe和dll共享。 在Windows中,这两个家伙 永远不会 共享:exe和dll将具有的单独副本。但是,在Li

  • 本文向大家介绍MySQL全局共享内存介绍,包括了MySQL全局共享内存介绍的使用技巧和注意事项,需要的朋友参考一下 前言 全局共享内存则主要是 MySQL Instance(mysqld进程)以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如存储查询缓存的 Query Cache,缓存连接线程的 Thread Cache,缓存表文件句柄信息的 Table Cache,缓存二进制日志的 Bi