我正在使用 Python 的 ctypes 调用 Linux 上的英特尔处理器跟踪库 (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 调用这样的内联函数,如果可以,如何调用?如果没有,有什么建议的解决方法吗?
最佳答案
不,这不可能。
这个函数不仅没有被你的库导出,它根本不存在!
当编译器决定它值得内联时(关键字只是建议) 函数体被复制/粘贴到所有未定义内联时通常会被调用的地方。
关于Python ctypes - 在头文件中调用静态内联函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40517532/