问题标签 [ruby-c-extension]

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 投票
2 回答
254 浏览

c - Ruby C 扩展,如何从分段错误中恢复

我写了一个简单的 Ruby C 扩展。一个方法期望第二个参数是一个字符串值。

通过传递整数而不是字符串很容易导致分段错误。我应该如何检测到这一点并在 C 方法中防止或恢复?

0 投票
1 回答
864 浏览

c - #包括它不工作

我已经多次尝试通过谷歌、这个网站和其他一些网站在互联网上找到这些信息;我似乎找不到一个好的教程和/或答案。

我将如何在 Visual C++ 2010 中使用 Ruby C API?我已将 Ruby 包含文件夹添加到我的项目的包含路径中,并且我还添加了 Ruby devkit 包含文件夹。但是,当我#include <ruby.h>仍然找不到inttypes.h时,并且在添加 devkit 路径之前,它找不到其他各种头文件。

我究竟做错了什么?

0 投票
2 回答
1219 浏览

ruby - 编译 Ruby C 扩展时如何静态链接外部库

我正在 Windows 上构建一个 Ruby C 扩展,它需要一些外部 C 库,特别是 libcurl 及其依赖项。我有 curllib dll 和 .a 文件。但是,当我使用 extconf.rb 构建时,它总是动态链接库,这需要有人安装 curl 并在他们的 Windows 路径中使用已编译的扩展。相反,我希望 extconf.rb 静态链接 curl 及其依赖项,以便任何人都可以在 windows 上使用扩展,而无需先将 curllib 添加到他们的路径中。

这是我的 extconf.rb

这是我生成我的makefile的命令

有什么我可以添加到我的 extconf.rb 文件或命令来强制 ruby​​ 将外部库静态链接到我的 c 扩展的东西吗?任何帮助将不胜感激,如果您需要更多信息,请告诉我。

0 投票
2 回答
357 浏览

objective-c - 将 Cocoa 标头链接到 ruby​​ C 扩展

我正在为 ruby​​ 开发 C 扩展,但我需要包含IOBluetooth框架中的标头,特别是:

一切编译正常,但在运行时,扩展错误:

我相当确定这与链接过程中未包含的框架有关,但我不确定为什么。任何帮助将不胜感激

extconf.rb

生成的 MakeFile: http://paste.wilhall.com/25

更新: 我修改了 Makefile 以便库静态链接;仍然遇到同样的错误,但这次是在链接时。

奇怪的是,have_header在我的extconf.rb文件中发现这些头文件很好。

更新: 我从系统日志文件中提取了以下内容:

如果我没记错的话,EXC_BAD_ACCESS (SIGABRT)是不是经常跟GC问题有关?将调查并发布结果

0 投票
1 回答
255 浏览

ruby - Ruby C 扩展不能是“必需的”

我有一个 ruby​​ 扩展,我正在构建一个 gem。它有这个目录结构

当我构建并安装它时,没有错误,并且'需要'gem(例如需要'cowboy')在irb中工作正常。

但是,当我运行“ruby test/test_cowboy.rb”时,我从 require 中得到一个加载错误(它实际上是在抱怨 lib/cowboy.rb 中的“require 'cowboy/cowboy'”。

有谁知道为什么???

0 投票
1 回答
76 浏览

ruby - 构建用于测试的 ruby​​ c-extension 的推荐方法

我正在使用构建一个 ruby​​gem

但是,这似乎不是测试 gem 的最佳方法,因为它将其移出本地环境并进入 ruby​​gems 路径。

是否建议使用构建 gem

? 还是有更好的做法?

0 投票
0 回答
101 浏览

ruby - ruby 的 C 扩展中是否有任何用于线程安全的锁定机制?

像 python 的 Py_BEGIN_ALLOW_THREADS 和 Py_END_ALLOW_THREADS 之类的东西?

0 投票
1 回答
366 浏览

ruby - Ruby 扩展,将大数据流传输到 Ruby

我的 C 库生成了一个非常大的 POD 结构数组。将它传递给 Ruby 端的最有效方法是什么?在 Ruby 方面,原始值数组对我来说很好。

我当前的解决方案通过分别存储每个元素和字段来工作,而且速度非常慢。分析表明,这个函数在平均数据上占用大约 15% 的程序时间,它甚至不是计算部分。

我已经阅读过Data_Wrap_Struct,但不确定我是否需要它。如果我将一个 raw 传递void*给字符串,然后在 Ruby 端解压它,它会更快吗?

0 投票
1 回答
296 浏览

jruby - pg_ext 在 jruby (rvm) 上抛出“针对无效 ruby​​ 运行时初始化的 C 扩展”

我有一个在 Ruby-1.9.3-p392 上工作的项目,我尝试用 Jruby 加载它(jruby-head 与 rvm 一起安装,目前是 jruby 1.7.4.dev (1.9.3p392))

所有 rake 任务都失败并出现以下跟踪

0 投票
1 回答
417 浏览

c - Ruby C 扩展 rb_str_new2 似乎返回 false

由于作品版权,我无法发布我的实际代码,所以我将尝试用简单的示例代码来展示我的问题。

我有一个 C 扩展,其简化版本如下所示:

然后,需要这个的 ruby​​ 代码如下所示:

然后在我的生产项目中调用它,例如:

这是有趣的事情。当我在生产环境中运行此代码时,上面 x.test 的返回值为 false(字面意义上的值为 false,而不是字符串)。此外,对文件的写入永远不会发生。但是,如果我在一些简化的测试代码中执行此操作,它会像预期的那样返回字符串“Success”,并且确实完成了写入。

有谁知道会导致此函数不执行写入并返回 false 的任何情况?我已经尝试在它周围进行救援,以防它抛出一个 rb_raises,但它似乎没有。

我和我团队的其他 3 名成员整个下午都在看这个问题,但没有找到答案。