问题标签 [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.
python - Python CFFI:从多个源文件构建单个模块
我的目标是从多个 C 源文件构建单个模块/扩展。实现这一目标的最佳实践是什么?
我尝试了什么:
我知道该ffi.set_source
函数具有 optionalsources
和include_dir
kwargs,并且应该有可能使用这些 kwargs 从多个源文件构建单个共享对象。不幸的是,我在CFFI Documentation的 API 参考中找不到任何关于这些 kwargs 的信息。所以我无法弄清楚细节。是否有任何文件解释如何正确使用这些 kwargs?
我目前使用:
虽然这确实有效,但对我来说似乎有点 hacky。是否可以使用sources
kwarg 而不是第二个位置 arg source
?这将使我摆脱骇人听闻的''.join(f'#include "{source}"\n' for source in SOURCES)
部分。
如果有更简单的方法,我也会感兴趣!
任何帮助表示赞赏。谢谢!
common-lisp - 将目录全局添加到 cffi:*foreign-library-directories*
我在 macOS 下使用 Nix 包管理器来安装我的大部分软件,包括动态库。我想让 CFFI 可以访问它们。这意味着添加一个路径到cffi:*foreign-library-directories*
. 很好,但我该怎么做
全局适用于我的系统(例如,应该适用于通过 Quicklisp 加载的包)
每次开始时都没有加载 CFFI
sbcl
吗?
忽略第二个标准,我可以添加几行~/.sbclrc
:
我正在寻找的是一种在加载 CFFI后添加路径的方法。有点像eval-after-load
在 Emacs Lisp 中。那可能吗?
python - 最简单的python cffi示例
我正在尝试使用 cffi 从 python 调用 ac 函数或 c 程序,但我发现大多数示例太复杂,无法轻松学习。我发现的最好的例子之一就是这个例子,我已经复制了它并制作了一个稍微简单的版本,我想在这里发布。
我将非常感谢对此示例的任何反馈,或者我希望有人可以制作一个更短、更简单的示例,在 python 中使用 cffi 来实现 API 外联和内联,甚至可能是一个超级简单的 ABI 示例。调用一个简单的添加函数是多么容易,这给我留下了深刻的印象,比从 Lua 调用 c 要容易得多。
所以它似乎有效,但我仍然不确定为什么,也不确定我的更复杂的真实示例的效果如何,因为我真的不知道我在做什么。顺便说一句,这是我编写或运行的第一个 python 程序。我的“你好世界”。我的目的是调用我从 python 脚本编写的 1000 行 c 程序,以便与 openlightspeed Web 服务器一起运行。
python - msys: pip install cffi 由于未定义的引用而失败
我正在尝试在 MSYS2 上安装 cffi。
如果我尝试pip install cffi
使用 MinGW 64 位 shell,我会得到以下信息:
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
给出:
这些文件确实存在于我的系统上,因为:
python - 如何在 CFFI 制作的 PYPY 中使用 ac 扩展
我正在尝试访问最初形成XXX.c
and的函数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
,我该怎么做?
common-lisp - CLOS 等价于析构函数
我正在使用由 cffi 驱动的包装库 cffi,并且有一些对象需要清理。我想知道我是否可以with-smth
通过将此类对象封装在具有析构函数的类中来放弃编写清理代码(或减少宏的使用)的需要。我可以这样做吗?
pointers - 指向 Common Lisp 中的外部字符串的指针
使用 SBCL,我正在尝试使用此签名调用 GStreamer 函数:
所以我根据我在这里看到的内容编写了这个接口代码(简化) :
但是当我运行它时,我得到一个“内存错误”引用一个地址,该地址原来是一个“oof”的 ASCII 字符串,与原始字符串相反。看来我需要另一个级别的间接性。或者也许 defcfun 是错误的。我该如何做到这一点?
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
如何在这里导入我自己创建的文件。
python - 使用 Char 作为参数从 Fortran DLL 调用函数
我正在尝试使用 Python 从第 3 方 Fortran DLL 调用函数(冒泡排序)。我的问题是将 char 传递给函数。我让它与 cffi 一起工作,如下所示,但我想使用 ctypes。
cffi 版本:
输出:
现在我的 ctypes 版本:
错误信息:
______________________________________________________
我在使用 cffi 时遇到的一个问题是:当我再次调用该函数时,它不会对数组进行排序。我需要重新启动内核以获得正确的结果:
输出:
______________________________________________________
现在我在 Win10 64 位上使用 Spyder 和 Python 3.8.3 32 位。