gpt4 book ai didi

Python ctypes加载错误: undefined symbol

转载 作者:太空狗 更新时间:2023-10-30 01:09:00 26 4
gpt4 key购买 nike

我试图使用 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++ 共享库时出现此类“ undefined symbol ”错误,并且通过将编译器从 gcc 更改为 g++ 来解决问题。然而,我的源代码是用 C 编写的——所以情况可能不同(实际上我尝试用 g++ 编译这个源代码,但出现了一堆错误)。谁能指出我在这里缺少什么?谢谢!

最佳答案

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

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

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

关于Python ctypes加载错误: undefined symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17716607/

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