Python ctypes - 在头文件中调用静态内联函数?

时间:2016-11-09 23:09:13

标签: python c static inline ctypes

我正在使用Python的ctypes来调用Linux上的Intel处理器跟踪库(libipt)。库中的一个初始化函数pt_config_init()被定义为intel-pt.h头文件中的静态内联函数。当我尝试从我的Python代码调用此函数时,它会抛出此错误:

  libipt.pt_config_init(byref(config))
File "/usr/lib64/python3.5/ctypes/__init__.py", line 355, in __getattr__
  func = self.__getitem__(name)
File "/usr/lib64/python3.5/ctypes/__init__.py", line 360, in __getitem__
  func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /lib64/libipt.so.1.4.0: undefined symbol: pt_config_init

这是有道理的,因为函数没有编译到库中,而是通过在相关的C源中包含头文件来访问。有没有办法用ctypes调用这样的内联函数,如果是这样,怎么样?任何建议的解决方法,如果没有?

1 个答案:

答案 0 :(得分:2)

不,这是不可能的。

此功能不仅不会被您的图书馆导出,也根本不存在!

当编译器决定值得内联时(关键字只是建议) 函数体被复制/粘贴在通常在未定义内联时调用的所有位置。