问题标签 [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 回答
759 浏览

c - 将 ruby​​ 数组值传递给 C 数组

我正在尝试根据这个配方为 C 中的 ruby​​ 制作一个独立的 FFT 扩展

我已经注意到了几种在 ruby​​ 和 c 之间传递不同值的方法。但是,我对 ruby​​ 和 C 都相当陌生,并且无法弄清楚如何将数组从 VALUE ruby​​ 对象复制到 C 数组中。

编译错误:SimpleFFT.c:47:错误:下标值既不是数组也不是指针

和代码:

提前致谢 :)

0 投票
1 回答
587 浏览

c - 如何在 Ruby 的 C 扩展 API 上检索“独立”符号

我想从 C 函数返回几个值,恕我直言,哈希是一个不错的选择。我第一次用来rb_intern('A_KEY')创建密钥,但扩展程序崩溃了。现在,我正在使用rb_str_new2,但我更喜欢符号。

如何创建新符号并在不引用类或方法的情况下使用它?

0 投票
2 回答
332 浏览

c - Ruby extension link error

I keep getting this fairly obscure link error whenever I try to link my Ruby extension:

I couldn't find anything on this. I experimented for a while and it linked fine when I removed the header files, so I moved on without them (Yes, very bad idea).

Turns out I need them, now. So, what is this error exactly, and how do I eliminate it?

Update: After clearing everything, I started getting these warnings:

These also appeared when I first encountered the problem. I'm not exactly sure about what they mean.

0 投票
1 回答
440 浏览

c - 如何将链接目标添加到 Ruby mkmf?

我的 Ruby 扩展中,代码被组织到目录中,extconf.rb位于主库文件中的树的根部。

此设置的问题是目录中的所有文件都没有链接到我的库。mkmf似乎根本不考虑他们。

如何手动将它们添加为链接目标mkmf

更好的问题是:我可以使用更灵活的 Ruby 构建系统吗?

0 投票
1 回答
341 浏览

c - Ruby 1.8.7:在 C 扩展中调用函数时出现段错误

我正在为 Ruby 模块构建一个简单的 C 扩展,当我在扩展中调用另一个 C 函数时遇到了段错误。执行的基本流程是这样的:

  1. 我创建了一个 Ruby 类并在其上调用了一个实例方法,它
  2. 在我的扩展中调用一个 C 方法,它
  3. 在单独的文件中调用另一个 C 函数,但编译成功

这似乎是最后一次跳跃。我已经能够在几乎没有任何功能但函数调用的情况下重现该问题。我有一个标准extconf.rb,用直接 Make 编译这个东西,它在调用encrypt(). 在运行时,我发出以下命令:

输出:

红宝石类:

计算模块:

cryptlib.h:

cryptlib.c:

为什么这个破的这么厉害?我在ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10]不到一小时前从 MacPorts 编译的 MacBook Pro 上运行。我的gcc --versioni686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)

0 投票
2 回答
880 浏览

c - 在 C Ruby 扩展中使用 curl/libcurl

前言:我对C很陌生,所以我可能遗漏了一些明显的东西,但已经跑了好几天试图弄清楚它是什么......

我正在尝试创建一个可在 Mac 和 PC 上运行并使用 libcurl 下载文件的 Ruby C 扩展。

基本上,该工具所做的只是从 Ruby 获取文件列表,下载文件并将它们放在 Ruby 告诉它们的位置。

我有在 Ruby 中工作的扩展,并编译了一个 C 扩展来与 Ruby 交互。

基本上我的代码如下所示:

我遇到的问题是让 libcurl 实际工作:

我正在使用 Rubymkmf为我的扩展制作一个 Makefile:

我假设在编译扩展时,Makefile 找不到该 Curl 文件,但由于我是 C/Ruby 扩展的新手,我无法弄清楚为什么会这样。

当我运行curl-config --cflags这就是我得到的:

我的 libcurl 包含/库文件是:

我的设置:

  • Mac OSX 10.6.4
  • 红宝石 1.8.6-p420
  • 卷曲 7.21.7-DEV (i386-apple-darwin10.7.0) libcurl/7.21.7-DEV OpenSSL/0.9.8l zlib/1.2.3

任何帮助将不胜感激!

干杯

0 投票
3 回答
875 浏览

c - 如何使用 ac 扩展扩展我的 ruby​​ 类?

如果我有 Foo::Bar 用 Ruby 编写,并且我想向 Bar 添加一个方法作为 C 扩展。现在,当我像这样在 C 中创建 Foo::Bar 时:

但问题是:

所以我本质上是在覆盖原来的 Foo::Bar。如何扩展它而不覆盖它?

0 投票
2 回答
1524 浏览

c - 如何从我的 c 扩展访问 ruby​​ 数组?

我收到此错误

对于这条线

在这段代码中

我是否错误地使用了 self,而 rb_ivar_get 实际上并没有指向 PairCounter 类?

0 投票
2 回答
114 浏览

c - 为什么我从我的 ruby​​ 数组拉到我的 c 扩展名的值是错误的?

此方法只是验证我是否能够正确查看 ruby​​ 数组的元素。

但是当我使用方法时,数组的元素是错误的。奇怪的是,它看起来不像我得到某种地址信息,因为打印的数字大小大致对应于 ruby​​ 数组中数字的大小。每次我创建一个新对象并运行 print_cards 时,这些数字也是一致的。

0 投票
1 回答
728 浏览

c - 我应该在 Data_Wrap_Struct 中作为类返回什么?

这是我的精简代码,它隔离了我的问题:

当我在 ruby​​ 中调用 get_pairs_2 时,出现此错误:

我已经确认 C 将 EV::PairCounter 视为超类,而不是字符串或其他东西。

顺便说一句,这就是 C 扩展 API 对 Data_Wrap_Struct 所说的:

将 C 数据封装到 Ruby 对象中

要将 C 指针包装和对象化为 Ruby 对象(所谓的 DATA),请使用 Data_Wrap_Struct()。

Data_Wrap_Struct() 返回一个创建的 DATA 对象。klass 参数是 DATA 对象的类。mark 参数是标记该数据指向的 Ruby 对象的函数。free 参数是释放指针分配的函数。如果这是-1,指针将被释放。函数 mark 和 free 将从垃圾收集器中调用。