ctypes - 初学者

新手上路,请多包涵

我的任务是将 ac 库“包装”到 python 类中。文档在这个问题上非常含糊。他们似乎希望只有高级 python 用户才能实现 ctypes。

一些循序渐进的帮助会很棒。

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

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

事实上,这是我在他们的代码中遇到的错误:

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

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

原文由 spentak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 613
1 个回答

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

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

测试库.c

 #include <stdio.h>

void myprint(void);

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

现在将它编译为一个共享库( mac fix found here ):

 $ 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 编写一个包装器:

测试库包装器.py

 import ctypes

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

现在执行它:

 $ python testlibwrapper.py

你应该看到输出

Hello world
$

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

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

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

原文由 Chinmay Kanchi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题