Python ctypes 加载错误:未定义的符号。

6
我试图使用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 ++编译此源代码,但是得到了一堆错误)。请问有谁能指出我在这里错过了什么?谢谢!


我也遇到了同样的问题,非常希望能听到这个答案对你是否有所帮助,或者你找到了其他解决方案。 - Bex
1个回答

5

我认为在第二行中,您应该要求将libsub.so与指向原始libusb.so的指针链接在一起:

gcc -shared -Wl,-soname,libsub.so -lusb -o libsub.so libsub.o
                                  ^^^^^

也许你还需要使用-L/path指定到libusb.so的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接