[英]Python ctypes loading error: undefined symbol
我試圖將一個從 C 源編譯的共享庫加載到帶有 ctypes 的 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++ 來編譯這個源代碼,但遇到了一堆錯誤)。 誰能指出我在這里缺少什么? 謝謝!
我相信您應該在第二行中要求將 libsub.so 與指向原始 libusb.so 的指針鏈接在一起:
gcc -shared -Wl,-soname,libsub.so -lusb -o libsub.so libsub.o
^^^^^
也許您還需要使用-L/path
指定 libusb.so 的-L/path
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.