我试图使用 ctypes 将从 C 源代码编译的共享库加载到 Python 中。共享库(名为“库子库“下面)使用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++ 来编译这个源代码,但出现了一堆错误)。谁能指出我在这里缺少什么?谢谢!
我相信您应该在第二行中要求将您的 libsub.so 与指向原始 libusb.so 的指针链接在一起:
gcc -shared -Wl,-soname,libsub.so -lusb -o libsub.so libsub.o
^^^^^
也许您还需要指定 libusb.so 的路径-L/path
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)