gpt4 book ai didi

python - 仅使用 python 封装 c 库

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:04 25 4
gpt4 key购买 nike

我获得了一个c库wave.so,定义了一个函数接口(interface),我按照这里的指南

https://stackoverflow.com/a/5868051/2789784

并且它有效。但是,当我将脚本制作为文件 MyModule.py 并尝试通过

导入时
import MyModule

然后它给了我这个错误。

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initwave)

为什么会发生这种情况?我应该如何修复它?

已修复:所以我在同一个文件夹中都有MyModule.py和MyModule.so,python尝试加载MyModule.so而不是MyModule.py,当然他不能成功,将MyModule.py的名称更改为wave.py并

import wave 

问题解决了。所以基本上,如果你只想调用一些 C++ 库函数,你实际上只需要一个 Python 脚本包装器,仅此而已,不需要 C 编程。我也可以将我的 C++ 共享库用于其他应用程序。

最佳答案

当您用 C 语言编写扩展模块时,必须有一个模块初始化函数。如果您的模块名为 wave,则扩展模块中必须有一个名为 initwave 的函数。一个简单的例子是:

static PyMethodDef methods[] = {
/* methods go here, if any */
{NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC initwave(void){
Py_InitModule3("wave", methods, "this is the doc string");
}

然后使用如下内容编译扩展:

Extension('wave',
['source_file.c', 'another_source_file.c'],
)

您可以导入的扩展模块名为wave.so,(我不知道重命名它是否安全,但这绝对不是一个好主意)在你的 python 脚本 MyModule.py 中只需执行以下操作:

import wave 

关于python - 仅使用 python 封装 c 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19027686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com