我试图使用ctypes将从C源代码编译的共享库加载到Python中。共享库(以下命名为“libsub.so”)使用了libusb库。这是“make”所做的:
gcc -c -O2 -Wall -Werror -g -I../src -I../boot/vnd/fw -I. -fPIC -DLIBUSB_1_0 -I/usr/include/libusb-1.0 -o libsub.o libsub.c
gcc -shared -Wl,-soname,libsub.so -o libsub.so libsub.o
之后我尝试了Python:
import ctypes
h = ctypes.cdll.LoadLibrary('./libsub.so')
然而,我遇到了这样的错误
OSError: ./libsub.so: undefined symbol: libusb_open
我发现"libusb_open"实际上是在"/usr/include/libusb-1.0/libusb.h"的libusb头文件中的一个函数,并且已经在该库“libsub.c”的源代码中包含了。
StackExchange上的一些帖子谈到了使用ctypes加载C++共享库时出现此类“未定义符号”错误,并通过将编译器从gcc更改为g ++来解决问题。 然而,我手头的源代码是用C编写的---所以情况可能有所不同(实际上,我尝试使用g ++编译此源代码,但是得到了一堆错误)。请问有谁能指出我在这里错过了什么?谢谢!