gpt4 book ai didi

python - 从 Python 调用 C 函数

转载 作者:行者123 更新时间:2023-11-30 17:30:50 33 4
gpt4 key购买 nike

我正在尝试使用 ctypes 从 Python 调用 c 函数。

我有三个 c 文件,其中两个包含用于 USB 设备的驱动程序(usb-1024LS.c 和 pmd.c),一个包含一些用于测试驱动程序的函数(myTest_1024LS.c)。驱动程序 c 文件使用 libusb。当我尝试运行我的脚本时,编译器似乎找不到 libusb。我收到错误:

File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
OSError: /path-to-folder/usb1024LS_with_py/pmd.so: undefined symbol: usb_get_driver_np

usb_get_driver_np是libusb中的一个函数。

我的Python脚本:

import ctypes

pmd = ctypes.CDLL('/home/oysmith/NetBeansProjects/MCCDAQ/usb1024LS_with_py/pmd.so');
usb1024LS = ctypes.CDLL('/home/oysmith/NetBeansProjects/MCCDAQ/usb1024LS_with_py/usb-1024LS.so');
testFunc = ctypes.CDLL('/home/oysmith/NetBeansProjects/MCCDAQ/usb1024LS_with_py/myTest_1024LS.so');

# declare the function we use
testFunc.writeByte.argtypes = (ctypes.c_void_p,)
testFunc.writeByte.restype = ctypes.c_void_p

testFunc.findInterface.argtypes = (ctypes.c_void_p,)
testFunc.findInterface.restype = ctypes.c_void_p

pmd.PMD_GetInputReport.argtypes = (ctypes.c_char_p, ctypes.c_uint, ctypes.c_uint, ctypes.c_int, ctypes.c_int,)
pmd.PMD_GetInputReport.restype = ctypes.c_char_p, ctypes.c_uint, ctypes.c_uint, ctypes.c_int, ctypes.c_int

#call C function
testFunc.findInterface()

其中 findInterface 调用 pmd.c 中的函数,而 pmd.c 中的函数调用 libusb 中的函数。

我是从 Python 调用 c 函数的新手,所以我需要可以获得的所有帮助!谢谢!

最佳答案

我最近问了一个类似的问题,但我不知道你的问题是否与我的有关(我是初学者),我有一个调用约定问题,并且你有 undefined symbol ,看起来很接近,所以我建议你读一下我的问题是什么:Wrapping c++ functions with ctypes及其被接受的答案,阅读起来并不长。

你说这可能是编译器的问题,但你正在运行 python 脚本,对吗?你的意思是Python解释器,还是运行脚本之前的C编译器?您是否尝试过使用 C 库构建 C 主程序来测试与 libusb 的通信,而无需使用任何 python?

我希望这会有所帮助。

关于python - 从 Python 调用 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24906957/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com