问题标签 [cffi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
294 浏览

python - Python CFFI:从多个源文件构建单个模块

我的目标是从多个 C 源文件构建单个模块/扩展。实现这一目标的最佳实践是什么?

我尝试了什么:

我知道该ffi.set_source函数具有 optionalsourcesinclude_dirkwargs,并且应该有可能使用这些 kwargs 从多个源文件构建单个共享对象。不幸的是,我在CFFI Documentation的 API 参考中找不到任何关于这些 kwargs 的信息。所以我无法弄清楚细节。是否有任何文件解释如何正确使用这些 kwargs?

我目前使用:

虽然这确实有效,但对我来说似乎有点 hacky。是否可以使用sourceskwarg 而不是第二个位置 arg source?这将使我摆脱骇人听闻的''.join(f'#include "{source}"\n' for source in SOURCES)部分。

如果有更简单的方法,我也会感兴趣!

任何帮助表示赞赏。谢谢!

0 投票
1 回答
167 浏览

common-lisp - 将目录全局添加到 cffi:*foreign-library-directories*

我在 macOS 下使用 Nix 包管理器来安装我的大部分软件,包括动态库。我想让 CFFI 可以访问它们。这意味着添加一个路径到cffi:*foreign-library-directories*. 很好,但我该怎么做

  • 全局适用于我的系统(例如,应该适用于通过 Quicklisp 加载的包)

  • 每次开始时都没有加载 CFFIsbcl吗?

忽略第二个标准,我可以添加几行~/.sbclrc

我正在寻找的是一种在加载 CFFI后添加路径的方法。有点像eval-after-load在 Emacs Lisp 中。那可能吗?

0 投票
1 回答
3012 浏览

python - 最简单的python cffi示例

我正在尝试使用 cffi 从 python 调用 ac 函数或 c 程序,但我发现大多数示例太复杂,无法轻松学习。我发现的最好的例子之一就是这个例子,我已经复制了它并制作了一个稍微简单的版本,我想在这里发布。

我将非常感谢对此示例的任何反馈,或者我希望有人可以制作一个更短、更简单的示例,在 python 中使用 cffi 来实现 API 外联和内联,甚至可能是一个超级简单的 ABI 示例。调用一个简单的添加函数是多么容易,这给我留下了深刻的印象,比从 Lua 调用 c 要容易得多。

所以它似乎有效,但我仍然不确定为什么,也不确定我的更复杂的真实示例的效果如何,因为我真的不知道我在做什么。顺便说一句,这是我编写或运行的第一个 python 程序。我的“你好世界”。我的目的是调用我从 python 脚本编写的 1000 行 c 程序,以便与 openlightspeed Web 服务器一起运行。

0 投票
0 回答
778 浏览

python - msys: pip install cffi 由于未定义的引用而失败

我正在尝试在 MSYS2 上安装 cffi。

如果我尝试pip install cffi使用 MinGW 64 位 shell,我会得到以下信息:

0 投票
4 回答
4853 浏览

ubuntu-18.04 - certbort 命令返回 ModuleNotFoundError: No module named '_cffi_backend'

我按照指南让我的 python 烧瓶应用程序运行,我在最后一步使用 certbot 将 http 更改为 https。但是当我运行我的 certbot 命令时,sudo certbot --nginx -d domainname -d www.domainname我得到了ModuleNotFoundError: No module named '_cffi_backend'

整个错误是:

我希望有人能提供帮助,因为我发现很多人都在问这个神秘的 _cffi_backend 事情。

更多信息:

如果我这样做python3 -m pip install cffi,它说要求已经满足。

在安装其他东西并尝试不同的人的解决方案时,我也遇到了这个错误。 'ModuleNotFoundError: No module named 'apt_pkg' 这似乎可以通过做来解决,sudo apt-get install python3-apt --reinstall但现在我得到了:ImportError: cannot import name '_gi' from partially initialized module 'gi' (most likely due to a circular import) (/usr/lib/python3/dist-packages/gi/__init__.py)

我还与 /usr/lib/python3/dist-packages/apt_pkg.so -> apt_pkg.cpython-36m-x86_64-linux-gnu.so 建立了一个符号链接,其他人说可以工作。我正在运行 python 3.8,但服务器上可能也有 3.6。如果我这样做python,它会打开 3.8 shell。我也在运行 ubuntu 18.04.4。

ls -al /usr/bin | grep python 给出:

这些文件确实存在于我的系统上,因为:

0 投票
0 回答
83 浏览

python - 如何在 CFFI 制作的 PYPY 中使用 ac 扩展

我正在尝试访问最初形成XXX.cand的函数XXX.h,编译为 XXX.so',然后XXX_.c通过 CFFI 生成。当测试文件简单地导入XXX_并调用XXX_的函数时,它工作正常。但是当我使用pypy test.py而不是时python test.py,它会显示错误ImportError: No module named XXX_。我读到 pypy 中的库与 python 中的不同,所以我尝试使用pypy pip来安装包,但该库只有.so,或c文件但没有site-package,我该怎么做?

0 投票
0 回答
139 浏览

common-lisp - CLOS 等价于析构函数

我正在使用由 cffi 驱动的包装库 cffi,并且有一些对象需要清理。我想知道我是否可以with-smth通过将此类对象封装在具有析构函数的类中来放弃编写清理代码(或减少宏的使用)的需要。我可以这样做吗?

0 投票
0 回答
88 浏览

pointers - 指向 Common Lisp 中的外部字符串的指针

使用 SBCL,我正在尝试使用此签名调用 GStreamer 函数:

所以我根据我在这里看到的内容编写了这个接口代码(简化) :

但是当我运行它时,我得到一个“内存错误”引用一个地址,该地址原来是一个“oof”的 ASCII 字符串,与原始字符串相反。看来我需要另一个级别的间接性。或者也许 defcfun 是错误的。我该如何做到这一点?

0 投票
1 回答
89 浏览

python - cffi embedding_init_code 导入自定义py文件

我正在尝试将我的 python 代码转换为 dll,在下面的代码中,ffi.embedding_init_code我可以导入我用 pip 或 conda 安装的包,如 cv2、numpy、pil 等,但我创建了 python 文件 my_tools.py,这在访问时出错dll。“ModuleNotfoundError:没有名为‘my_tools’的模块”

下面是我的plugin.h

如何在这里导入我自己创建的文件。

0 投票
1 回答
136 浏览

python - 使用 Char 作为参数从 Fortran DLL 调用函数

我正在尝试使用 Python 从第 3 方 Fortran DLL 调用函数(冒泡排序)。我的问题是将 char 传递给函数。我让它与 cffi 一起工作,如下所示,但我想使用 ctypes。
cffi 版本:

输出:

现在我的 ctypes 版本:

错误信息:

______________________________________________________
我在使用 cffi 时遇到的一个问题是:当我再次调用该函数时,它不会对数组进行排序。我需要重新启动内核以获得正确的结果:

输出:

______________________________________________________
现在我在 Win10 64 位上使用 Spyder 和 Python 3.8.3 32 位。