ctypes - 初学者

2023-12-04

我的任务是将 c 库“包装”到 python 类中。这些文档在这个问题上非常模糊。看来他们期望只有高级 python 用户才会实现 ctypes。

一些逐步的帮助会很棒。

所以我有我的c 库。我该怎么办?我把什么文件放在哪里?如何导入库?我读到可能有一种方法可以“自动换行”到Python?

(顺便说一句,我在 python.net 上完成了 ctypes 教程,但它不起作用。这意味着我认为他们假设我应该能够填写其余步骤。)

事实上,这是我使用他们的代码得到的错误:

File "importtest.py", line 1
   >>> from ctypes import *
   SyntaxError: invalid syntax

我真的可以在这方面使用一些逐步的帮助!


这是一个快速而肮脏的 ctypes 教程。

首先,编写您的 C 库。这是一个简单的 Hello world 示例:

测试库.c

#include <stdio.h>

void myprint(void);

void myprint()
{
    printf("hello world\n");
}

现在将其编译为共享库(mac 修复在这里找到):

$ gcc -shared -Wl,-soname,testlib -o testlib.so -fPIC testlib.c

# or... for Mac OS X 
$ gcc -shared -Wl,-install_name,testlib.so -o testlib.so -fPIC testlib.c

然后,使用 ctypes 编写包装器:

testlibwrapper.py

import ctypes

testlib = ctypes.CDLL('/full/path/to/testlib.so')
testlib.myprint()

现在执行它:

$ python testlibwrapper.py

你应该看到输出

Hello world
$

如果您已经有了一个库,则可以跳过本教程的非 Python 部分。确保 ctypes 可以通过将其放入来找到该库/usr/lib或另一个标准目录。如果这样做,则在编写包装器时无需指定完整路径。如果您选择不这样做,您must调用时提供库的完整路径ctypes.CDLL().

这里不是提供更全面的教程的地方,但如果您在此网站上寻求有关特定问题的帮助,我相信社区会为您提供帮助。

PS:我假设你使用的是 Linux,因为你已经使用过ctypes.CDLL('libc.so.6')。如果您使用其他操作系统,情况可能会发生一些变化(或很多变化)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ctypes - 初学者 的相关文章

随机推荐

  • 使用 Discord.js 使用 Discord 机器人将语音频道中的所有人静音

    我本来想在我的机器人不和谐中添加一个功能 当我启动订单时 可以改变语音休息室中的每个人 但我不知道如何做 我的机器人是使用 Node js 和 Discord js 进行编程的 有人能帮我吗 谢谢 我的代码 const Discord re
  • Spring security oauth2 登录和资源服务器在同一应用程序中

    我有一个应用程序 用户 应用程序可以使用 OpenID 提供商或 JWT 令牌进行身份验证 这是我的 spring 安全配置类 EnableWebSecurity public class SecurityConfiguration ext
  • 在createStore之前加载数据

    我创建了一些 React 文件 其中初始化了 Redux 存储 但是 我确实需要在初始化存储之前从 json 文件加载一些数据 我尝试导入一个加载 json 结构的脚本 然后将其分配给 createStore 初始状态值 但 createS
  • 从 Laravel 为 iOS AvPlayer 提供 mp3 文件

    我可以从控制器提供我的 mp3 文件 但从我的控 制器提供的文件不会在 ios AvPlayer 中播放 使用 url 我确信我的客户端代码没问题 因为它可以播放其他服务器上的歌曲 您也可以从我最后编写的链接检查我的服务器 并看到我的控制器
  • 为什么 Firefox 不显示正确的默认选择选项?

    我正在制作一个网络应用程序来管理产品 SKUS 其中一部分是将 SKU 与产品名称相关联 在表格的每一行上 我列出一个 SKU 并显示
  • GUI中如何刷图然后保存刷过的数据?

    我读过几篇关于如何保存刷过的数据的帖子 但是 在尝试这些帖子上的建议时 this this this this and this 它们似乎都不起作用 我在尝试这些建议时遇到的问题之一是 程序一直运行到最后才没有刷到任何数据 因此 保存的数据
  • 使用 OpenGL 和顶点数组对象渲染两个对象

    我正在尝试使用带有着色器的 OpenGL 在屏幕上渲染两个三角形 一个大的红色的 一个小的蓝色的 每个三角形由一组顶点位置和颜色以及一组顶点索引定义 我为每个三角形使用不同的顶点数组对象 下面是我的代码 我已将其简化为最小的可编译示例 但仍
  • 同步 HTTPS POST 请求 iOS

    对于 Android 我可以通过以下方式发送 POST 请求 HttpClient http new DefaultHttpClient HttpPost request new HttpPost https somewebsite com
  • 如何查看机器码?

    我已经用汇编语言 at t 语法 编写了一个程序 我想看看机器代码的外观 这就是我获取可执行代码的方式 as g o p1 o p1 s 32 gstabs ld o p1 p1 o m elf i386 假设您在 Linux 或 BSD
  • 使用 .id 使用 purrr::map_df 制作输入项列,无需复制命名向量的输入

    我经常想要映射数据框中的列名称向量 并使用 id争论 但要写出与每个相关的列名map迭代到那个 id列似乎需要在输入向量中将其名称加倍 换句话说 通过用自己的名称命名每个列名称 如果我不使用自己的名称来命名该列 那么 id仅存储迭代的索引
  • ffmpeg 将 gif 转换为带有反向功能的 webm

    我正在尝试使用下面的方法将 gif 文件转换为 webm 文件 该文件工作正常 但我想知道是否也可以使用 ffmpeg 反转它 或者我需要先使用 imagemagick 反转它 然后使用 ffmpeg 覆盖它 ffmpeg i your g
  • 如何在c#中找到打印机类型?

    如何在 C 中找到 PC 中安装的打印机类型 无论是点阵打印机 激光打印机还是喷墨打印机 以下类别告诉您打印机是点阵式 激光式还是喷墨式 using System using System Management namespace Cons
  • Tcpdf印地语句子显示问题

    我正在尝试使用 PHP 编程语言中的 tcpdf 库创建 pdf 文件 从昨天开始尝试但仍然得到 而不是印地语字体 我试图显示这句话 我添加了 2 到 3 种不同的印地语字体 但只得到问号 如果您在 tcpdf 或 mpdf 中有很好的印地
  • C++ 中堆栈上不同长度的数组分配[重复]

    这个问题在这里已经有答案了 我惊讶地发现在 C 中可以在堆栈上分配一个变长数组 例如int array i 它似乎在 clang 和 gcc 在 OS X 上 上运行良好 但 MSVC 2012 不允许它 这个语言特性叫什么 它是 C 语言
  • 错误 A2206 的问题:表达式中缺少运算符

    大家好 我在汇编中有这段代码 它应该创建一个消息框 但是当我尝试用 Masm 编译它时 我收到此错误 C test asm 26 错误 A2206 表达式中缺少运算符 386 model flat stdcall option casema
  • 无法将 JSON 解组到结构中

    我想将以下 JSON 解组到一个结构中 MAIN data KEY1 1111111 KEY2 2222222 KEY3 0 KEY4 AAAAAAA KEY5 9999 KEY6 4 KEY7 BBBBBBB 我已经尝试修改jsonStr
  • 使用 R 编程将文字中的数字转换为数字

    我的挑战是将单词中的 10 和 1 转换为数字 如输入句子中的 10 和 1 example input lt paste0 I have ten apple and one orange 数字可能会根据用户要求而改变 输入的句子可以标记化
  • C++正则表达式匹配大括号内的内容[重复]

    这个问题在这里已经有答案了 假设我想使用 C 11 正则表达式提取匹配大括号的内容 所以 举例来说 foo 会成功匹配 我可以使用match result提取内容 看起来很简单 但是下面的代码并没有完全达到我的愿望 std string f
  • 将 JSON 数据(带有节点请求)发布到 Express 服务器以保存到 MongoDB 时出现问题

    我使用 MongoDB 作为我的 Node Express 应用程序的后端数据库 总结一下我面临的问题 我不知道如何在 Express 应用程序中设置 body parser 配置 因为服务器端应用程序没有接收客户端应用程序 也是一个 no
  • ctypes - 初学者

    我的任务是将 c 库 包装 到 python 类中 这些文档在这个问题上非常模糊 看来他们期望只有高级 python 用户才会实现 ctypes 一些逐步的帮助会很棒 所以我有我的c 库 我该怎么办 我把什么文件放在哪里 如何导入库 我读到