我找不到很多关于此的文档。如何打包 gem,以便在安装 gem 时编译 C 扩展?
我特别想这样做:
对此的任何帮助,特别是示例源代码,将非常有用:)
路易斯·拉韦纳已创建rake-compiler就是为了这个目的。
但是,您确定需要 C 扩展吗?关于 C 扩展的问题是,每个 Ruby 实现都有自己的 C 扩展 API(而非基于 C 的扩展 API,如 XRuby、JRuby、Ruby.NET、IronRuby、HotRuby、MagLev、Red Sun 根本没有),这意味着你的 C 扩展只能工作在one执行。而且,自从 MRIonly实现 Ruby 1.8 和 YARVonly实现了 Ruby 1.9,而我们目前正处于 1.8 和 1.9 之间的过渡阶段,很可能很多人会使用至少两种不同的实现。 (我个人使用 5 个:MRI、YARV、JRuby、IronRuby 和 Rubinius。)
也许你最好使用Ruby-FFI。 Ruby-FFI 是 Ruby 的 FFI(外部函数接口)(duh),它允许您以跨 Ruby 实现可移植的方式绑定并映射纯 Ruby 中的 C 库。 FFI API 最初由埃文·菲尼克斯作为本机扩展 APIRubinius,然后被采用查尔斯·奥利弗·纳特(并由韦恩·迈斯纳) for JRuby. Wayne然后还写了红宝石-FFI 宝石,其中包含 MRI 和 YARV 的 C 扩展。洛朗桑索内蒂实现了 Ruby-FFIMacRuby, 马克·安德烈·库诺耶's tinyrb also 支持FFI(再次由韦恩·迈斯纳)和MagLev开发人员也在努力。这意味着,如果您可以让您的库使用 FFI 而不是 C 扩展,您将自动支持 6 种 Ruby 实现,而不仅仅是一种。
使用 C 扩展而不是 FFI 扩展的唯一原因是,如果您真的do想要一些特定于实现的行为。其中一个例子是解析树gem,它深入到 MRI 的肠道并撕掉解析树的内存表示。
最后但并非最不重要的一点是,看一下Nice-FFI项目由约翰·克罗桑特,其目的是使使用Ruby-FFI更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)