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

2023-11-21

我试图使用 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(使用前将#替换为@)

Python ctypes 加载错误:未定义的符号 的相关文章

随机推荐

  • 使用 sf 将空间坐标集转换为 R 中的多边形

    我的列表中的每个元素都包含一组空间坐标 我想使用 sf 将其转换为多边形 每组坐标都按照我想要 连接点 的顺序排序 并且第一行和最后一行相同 以闭合多边形 每个列表元素都用唯一标识符命名 我希望将其保留为 sf 输出中的属性 我在这里改编了
  • boost::asio ssl 链接错误

    我使用的是 boost 版本 1 47 Visual Studio 2010 我下载了 Windows 的二进制文件并从我的项目首选项链接到 include 目录和 lib 目录 但我仍然无法使用 boost asio 的任何 ssl 功能
  • 在 python 中使用 .csv 按特定列数据排序

    我正在尝试订购一个包含 300 多个条目的 csv 文件 并将其全部输出 并按方言下的一个特定列中的数值排序 这是我到目前为止编写的代码 但它似乎只是在输入数据时输出数据 import csv import itertools from i
  • Flink 中的 java.lang.NoSuchMethodError

    我尝试使用以下方法读取文件 final ExecutionEnvironment env ExecutionEnvironment getExecutionEnvironment DataSet
  • WinForms 全局异常处理?

    我已经实现了具有 DLL 库的软件 其中包含一组类 其中包括我的软件的所有方法 现在我希望能够处理一些全局错误 例如错误 26 它是所有这些类上的非网络相关错误 而不是转到每个类并添加它 我该怎么做呢 If 26是一个例外 那么你可以使用A
  • 在Python中将int转换为二进制字符串

    如何在 Python 中将整数转换为二进制字符串 37 100101 Python 的字符串格式方法可以采用格式规范 gt gt gt 0 b format 37 100101 Python 2 的格式规范文档 Python 3 的格式规范
  • CPU 中的 LRU 缓存是如何实现的?

    我正在为面试做准备 想重温一下我对缓存的记忆 如果CPU有一个带有LRU替换策略的缓存 那么它在芯片上实际上是如何实现的呢 每个缓存行会存储一个时间戳记吗 另外 在双核系统中两个 CPU 同时写入同一个地址时会发生什么情况 对于只有两种路的
  • AngularJs:替换字符串的一部分

    AngularJs 有没有办法替换字符串 我正在尝试做类似的事情 string replace some thing Thanks 你的片段有效 demo http plnkr co edit yNuNeE5yO3rgKAYfGx48 p
  • 相当于 C# 中 VB 的格式

    等效代码是什么Format iCryptedByte 000 VB NET 在 C 中 String Format format iCryptedByte where format like 0 D2 参见MSDN1 2 3
  • 在 Matplotlib 中绘制 k-NN 决策边界图

    How do I color the decision boundaries for a k Nearest Neighbor classifier as seen here I ve got the data for the 3 clas
  • Android:Edittext-获取当前行

    在编辑文本中是否有获取光标当前行的方法 如果没有 我会编写自己的方法 但只是想检查一下 如果我确实编写自己的方法 最好的方法是遍历编辑文本中的每个字符 直到选择开始并使用 For 循环计算 n 的数量 还是有更好的方法 谢谢 只是为了让人们
  • Angular 2 中无法加载图像

    HTML 文件 div img src New Google Logo png div 这里 New Google Logo png 与 html 文件位于同一文件夹中 但是在 ng 服务之后 html 页面会加载其他详细信息 但不会加载图
  • 如何在 Windows 上 pip 或 easy_install tkinter [重复]

    这个问题在这里已经有答案了 IDLE 抛出错误并说tkinter无法导入 有没有简单的安装方法tkinter via pip or easy install 似乎有很多软件包名称为此而流传 这个和其他各种变体tkinter pypy不工作
  • auto 关键字在 Dev C++ 中不起作用[重复]

    这个问题在这里已经有答案了 这是我写的代码 看看如何auto关键字有效 但它没有在 Dev C 中编译并给出以下警告 警告 C 11 auto 仅适用于 std c 11 或 std gnu 11如何克服这个故障并按照警告的指示去做 inc
  • Xamarin Forms:TabbedPage 中的内容页

    我正在尝试将一些自定义内容页面放入选项卡式页面中 遗憾的是我不确定如何使用 XAML 语法执行此操作 我的虚拟项目如下所示 Page 1
  • 将 AsyncRead 转换为 TryStream 字节的最佳方法是什么?

    我有一个AsyncRead并想将其转换为Stream
  • 同一个表中与 SQLAlchemy 的多对一关系

    我有一张 客户 表 其中客户可以是另一个客户的子项 这是表定义 ClientID int IDENTITY 1 1 NOT NULL name varchar 50 NOT NULL VPFSID varchar 50 NOT NULL T
  • 在 WebView 中从相机或图库上传图像

    此应用程序中的 WebView 打开一个带有上传按钮的页面 下面的代码块允许打开一个对话框以从图库或相机上传图像 在我的活动中 我有 private WebView wv make HTML upload button work in We
  • 一个干净的 CSS3 3 列布局,从哪里开始?

    我目前正在更新一个相当旧的网站 上次更新是在 2001 年左右 并同意使用 HTML5 和 CSS3 对于总体设计 我正在研究一种非常干净的白色和灰色色调风格 带有许多填充和边距 我的问题出在主页上 我想要一个 3 列居中布局 但从哪里开始
  • Python ctypes 加载错误:未定义的符号

    我试图使用 ctypes 将从 C 源代码编译的共享库加载到 Python 中 共享库 名为 库子库 下面 使用libusb图书馆 这就是 make 所做的 gcc c O2 Wall Werror g I src I boot vnd f