簡體   English   中英

Python ctypes 加載錯誤:未定義符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM