问题标签 [cextension]
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 - 在 C Python 扩展中动态构建和返回 Python 列表
我正在用 C 编写 Python 扩展,并且试图弄清楚如何使用我的扩展动态构建和返回 Python 列表。我知道如何使用Py_BuildValue构建预定大小的列表。有没有办法用 Py_BuildValue 创建一个列表,然后将项目附加到该列表?有没有不同的、更好的选择?
python - 使用 Py_BEGIN_ALLOW_THREADS 时如何避免 Python C 扩展中的 gcc 警告
在 Python C 扩展中操作 GIL 的最简单方法是使用提供的宏:
这很好用,让我为我的大部分代码释放 GIL,但为需要它的少量代码重新获取它。
问题是当我用 gcc 编译它时,我得到:
因为 Py_BEGIN_ALLOW_THREADS 是这样定义的:
所以,三个问题:
- 是否可以抑制 gcc 的警告,
- 有谁知道为什么 gcc 认为
_save
可能未初始化使用,因为它是在声明后立即分配的,并且 - 为什么没有定义宏来在一个语句中声明和初始化变量以避免该问题?
(最后两个真的只是为了我自己的好奇心)。
我可以通过不使用宏并自己做所有事情来避免这个问题,但我宁愿不这样做。
ruby - 在 Ruby 中编写 C 接口比在 Perl 中更容易吗?
根据官方 ruby About 页面,使用 C 扩展 Ruby 比使用 Perl 更容易。我不是(perl)XS 专家,但我发现使用Inline::C快速简单地编写一些东西非常简单,那么为什么在 Ruby 中更容易呢?
用 Ruby 编写 C 扩展比用 Perl 或 Python 更容易,它有一个非常优雅的 API 可以从 C 调用 Ruby。这包括调用将 Ruby 嵌入到软件中,用作脚本语言。SWIG 接口也可用。
那些做更多 C 扩展的人的任何进一步解释都是有用的。
ruby - 为 Ruby 1.9 更新 C 扩展
我正在更新一个相当旧的 C 扩展,该扩展绑定到我没有编写的 ruby gem。目前,当我执行将使用 C 扩展的脚本时,我收到此错误:
在同一个库中也存在问题STR2CSTR
,已通过将其替换为 StringValuePtr 来解决。我最初的想法是用 rb_string_value_ptr 替换 rb_str2cstr,但是当我尝试这样做时,C 扩展将无法构建。我绝不是 C 程序员,也不知道该去哪里。我知道我必须用它的替代品替换 rb_str2cstr,但我似乎无法弄清楚那是什么。
ruby - 将数据存储在 ruby C 扩展中 - 是不是很糟糕?
我的团队正在使用 Ruby 开发 MMO 服务器,我们选择开始将计算密集型操作转移到 C 扩展中。作为这项工作的一部分,我们将实际的数据存储移到了 C 中(使用 Data_Get_Struct 等)。因此,例如,每个 Ruby“Zone”对象都有一个关联的“ZoneKernel::Zone”C 结构,其中存储了实际的二进制数据。
基本上,我想知道这是否是一个糟糕的主意。我对 ruby 内部结构不是很熟悉,但只要父 Zone 保留在 ruby 端的内存中(从而防止对 C 数据进行垃圾收集),数据似乎就应该没问题。
一个警告是,我们已经收到了导致服务器崩溃的半常规“堆栈一致性错误”——这似乎是一个相关的内存问题(而不仅仅是你的花园品种段错误)——如果有人知道那可能是什么,我也将不胜感激!
objective-c - 如何调用这个函数?
下面是我在 Apple 文档中看到的示例,对如何调用功能感到困惑qsort_b
?需要作为 const void *l
&传递的参数是什么const void *r
。
python - Python cassandra-driver:找不到使用libev所需的C扩展
我安装了 Cassandra python 驱动程序版本 2.5.1,其中包含所有必需的依赖项,即 libev4、libev-dev、gcc、python-dev。但是我在导入时遇到以下错误LibevConnection
“未找到使用 libev 所需的 C 扩展。这可能意味着您在安装驱动程序时没有所需的构建依赖项”
我尝试重新安装甚至安装了最新版本的驱动程序,但没有成功。我正在使用 Ubuntu 12.04。
python - 导入 Pandas 的问题
我通过 anaconda 安装了 pandas,它似乎可以工作。但是,当我想导入 pandas 时,出现以下错误:
我已经尝试运行它,但响应始终是:
也许我在错误的目录中,但是我不知道应该在哪个目录中运行。我看了看,site-packages
但找不到熊猫或类似的东西。
然后我通过 pip 重新安装了 pandas
在此期间它说:
但是当我导入熊猫时,我又遇到了同样的错误。
任何人都可以帮忙吗?我做错了什么?
提前致谢
莱尼
python - Python - 在运行时编译 C 扩展
我编写了一个 C 程序来执行一些繁重的数值工作,并且一直在考虑实现代码的 Python 接口的最佳方法。
困难在于我的 C 应用程序必须重新编译才能更改一些参数,我非常希望 Python 接口能够更改这些参数。
我对 C 扩展相当陌生,是否有一种在运行时编译扩展(或其中的一部分)的既定方法?说当他们调用我的包装对象的init () 方法时?
我想我可以预编译该软件包的许多版本,但我觉得这很快就会变得笨拙。任何帮助/建议将不胜感激!
编辑: PS - 出于这个问题的目的,我想将 C 代码的设计视为固定的。这很不方便,但这些选择是在对几种不同的策略进行基准测试后出于性能原因做出的,现在被锁定了。鉴于这种结构,我很好奇构建 Python 接口的最佳方式。谢谢!
python - Python CExtension 给出 ModuleNotFoundError
我在 CentOS 7 上将 Python 3 与 Anaconda Spyder 一起使用。我正在尝试按照此视频使 Python CExtension 正常工作。 https://www.youtube.com/watch?v=a65JdvOaygM
我的所有文件都在 PYTHONPATH 中的 /home/peter/pythonCExtensions 中
我有一个包含以下内容的文件 myModule.c。
我制作了另一个文件 setup.py,它具有以下内容。
我跑了
并得到
然后我将 MyModule.cpython-37m-x86_64-linux-gnu.so 和 myModule.o 复制到 /home/peter/pythonCExtensions 中。
然后我打开 Spyder 并创建了一个文件 CInterface.py,它只包含
但是,当我运行此文件(F5)时,我得到
导致
安装 1 个软件包