问题标签 [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.
c - Ruby C 扩展,如何从分段错误中恢复
我写了一个简单的 Ruby C 扩展。一个方法期望第二个参数是一个字符串值。
通过传递整数而不是字符串很容易导致分段错误。我应该如何检测到这一点并在 C 方法中防止或恢复?
c - #包括它不工作
我已经多次尝试通过谷歌、这个网站和其他一些网站在互联网上找到这些信息;我似乎找不到一个好的教程和/或答案。
我将如何在 Visual C++ 2010 中使用 Ruby C API?我已将 Ruby 包含文件夹添加到我的项目的包含路径中,并且我还添加了 Ruby devkit 包含文件夹。但是,当我#include <ruby.h>
仍然找不到inttypes.h
时,并且在添加 devkit 路径之前,它找不到其他各种头文件。
我究竟做错了什么?
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 扩展的东西吗?任何帮助将不胜感激,如果您需要更多信息,请告诉我。
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问题有关?将调查并发布结果
ruby - Ruby C 扩展不能是“必需的”
我有一个 ruby 扩展,我正在构建一个 gem。它有这个目录结构
当我构建并安装它时,没有错误,并且'需要'gem(例如需要'cowboy')在irb中工作正常。
但是,当我运行“ruby test/test_cowboy.rb”时,我从 require 中得到一个加载错误(它实际上是在抱怨 lib/cowboy.rb 中的“require 'cowboy/cowboy'”。
有谁知道为什么???
ruby - 构建用于测试的 ruby c-extension 的推荐方法
我正在使用构建一个 rubygem
但是,这似乎不是测试 gem 的最佳方法,因为它将其移出本地环境并进入 rubygems 路径。
是否建议使用构建 gem
? 还是有更好的做法?
ruby - ruby 的 C 扩展中是否有任何用于线程安全的锁定机制?
像 python 的 Py_BEGIN_ALLOW_THREADS 和 Py_END_ALLOW_THREADS 之类的东西?
ruby - Ruby 扩展,将大数据流传输到 Ruby
我的 C 库生成了一个非常大的 POD 结构数组。将它传递给 Ruby 端的最有效方法是什么?在 Ruby 方面,原始值数组对我来说很好。
我当前的解决方案通过分别存储每个元素和字段来工作,而且速度非常慢。分析表明,这个函数在平均数据上占用大约 15% 的程序时间,它甚至不是计算部分。
我已经阅读过Data_Wrap_Struct
,但不确定我是否需要它。如果我将一个 raw 传递void*
给字符串,然后在 Ruby 端解压它,它会更快吗?
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 任务都失败并出现以下跟踪
c - Ruby C 扩展 rb_str_new2 似乎返回 false
由于作品版权,我无法发布我的实际代码,所以我将尝试用简单的示例代码来展示我的问题。
我有一个 C 扩展,其简化版本如下所示:
然后,需要这个的 ruby 代码如下所示:
然后在我的生产项目中调用它,例如:
这是有趣的事情。当我在生产环境中运行此代码时,上面 x.test 的返回值为 false(字面意义上的值为 false,而不是字符串)。此外,对文件的写入永远不会发生。但是,如果我在一些简化的测试代码中执行此操作,它会像预期的那样返回字符串“Success”,并且确实完成了写入。
有谁知道会导致此函数不执行写入并返回 false 的任何情况?我已经尝试在它周围进行救援,以防它抛出一个 rb_raises,但它似乎没有。
我和我团队的其他 3 名成员整个下午都在看这个问题,但没有找到答案。