我正在使用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调用这样的内联函数,如果是这样,怎么样?任何建议的解决方法,如果没有?
答案 0 :(得分:2)
不,这是不可能的。
此功能不仅不会被您的图书馆导出,也根本不存在!
当编译器决定值得内联时(关键字只是建议) 函数体被复制/粘贴在通常在未定义内联时调用的所有位置。