读Ruby for Rails的思考之Ruby的C扩展库

转载 2012年03月22日 23:15:52
Ruby除了用Ruby写的扩展库以外,还有许多C写的扩展库,比如socket编程库/系统日志功能库/数据库驱动 
这些库以.so或者.dll结尾,这也是我们require的时候不要使用.rb后缀的原因,比如 
Java代码  收藏代码
  1. require 'gdbm'  


Ruby开源项目、扩展库站点: 
Ruby Application Archive(RAA) 
RubyForge 

怎样写Ruby的C扩展库呢? 
我们来看看How to create a Ruby extension in C under 5 minutes 
该程序的前提是需要在linux/unix环境下 
MyTest/extconf.rb 
Java代码  收藏代码
  1. # Loads mkmf which is used to make makefiles for Ruby extensions  
  2. require 'mkmf'  
  3.   
  4. # Give it a name  
  5. extension_name = 'mytest'  
  6.   
  7. # The destination  
  8. dir_config(extension_name)  
  9.   
  10. # Do the work  
  11. create_makefile(extension_name)  

MyTest/MyTest.c 
Java代码  收藏代码
  1. // Include the Ruby headers and goodies  
  2. #include "ruby.h"  
  3.   
  4. // Defining a space for information and references about the module to be stored internally  
  5. VALUE MyTest = Qnil;  
  6.   
  7. // Prototype for the initialization method - Ruby calls this, not you  
  8. void Init_mytest();  
  9.   
  10. // Prototype for our method 'test1' - methods are prefixed by 'method_' here  
  11. VALUE method_test1(VALUE self);  
  12.   
  13. // The initialization method for this module  
  14. void Init_mytest() {  
  15.     MyTest = rb_define_module("MyTest");  
  16.     rb_define_method(MyTest, "test1", method_test1, 0);   
  17. }  
  18.   
  19. // Our 'test1' method.. it simply returns a value of '10' for now.  
  20. VALUE method_test1(VALUE self) {  
  21.     int x = 10;  
  22.     return INT2NUM(x);  
  23. }  

就这么简单,我们进入MyTest目录,运行 
Java代码  收藏代码
  1. ruby extconf.rb  

这会为我们创建Makefile,然后我们运行 
Java代码  收藏代码
  1. make  

这样我们的C扩展库就compile和build好了,让我们运行mytest.rb测试一下: 
Java代码  收藏代码
  1. # Load in the extension (on OS X this loads ./MyTest/mytest.bundle - unsure about Linux, possibly mytest.so)  
  2. require 'MyTest/mytest'  
  3.   
  4. # MyTest is now a module, so we need to include it  
  5. include MyTest  
  6.   
  7. # Call and print the result from the test1 method  
  8. puts test1  
  9.   
  10. # => 10  

该demo程序下载地址:extension-code.tar.gz

相关文章推荐

Ruby for Rails 最佳实践Ⅲ

第三章 了解 Ruby 前提下的 Rails 开发 一、YAML 和实际为编程的配置 YAML (按 UNIX 平台的传统,最初代表 Yet Another Markup Language,现在却...

Ruby for Rails 最佳实践十四

第四部分 结合 Ruby 和 Rails 第十四章 再次为 R4RMusic 应用领域建模 一、跟踪 ActiveRecord 模型实例的功能 1. 模型实例功能概览:Rails 模...
  • czc1009
  • czc1009
  • 2013年10月08日 14:38
  • 932

Ruby for Rails 最佳实践Ⅷ

第八章 控制流技术 一、条件代码执行 1. if 关键字及相关构造 if condition   # code here, executed if condition uates to tru...

Ruby & Rails install for linux

新手在linux上如何正确快速的安装ruby和ruby on rails

Ruby for Rails 学习笔记(一)

Ruby的安装 apt (Debian or Ubuntu) Debian GNU/Linux and Ubuntu use the apt package manager. You can us...

Kindeditor for Ruby on Rails 中文文档

Kindeditor是国产的所见即所得javascript富文本编辑器, 访问 http://www.kindsoft.net 获取更多信息. rails_kindeditor可以帮助你的rails程...

Ruby for Rails 最佳实践ⅩⅢ

第十三章 Ruby 动态特性 一、单例类的位置和角色 1. 单例方法在何处定义 对象的单例方法定义在对象单例类中。每个对象实际上有两个类: ■ 多个对象实例共享的类 ■ 单例类 可以将某个...

Ruby & Rails install for mac

新手在mac上如何正确高效的安装ruby和ruby on rails

使用gem安装rails,付解决It seems your ruby installation is missing psych (for YAML output).

http://blog.csdn.net/abbuggy/article/details/8181064 在前面,我们学会了使用RVM的作用和利用RVM安装ruby并管理其版本的方法。 下一步...
  • ABBuggy
  • ABBuggy
  • 2012年11月15日 00:03
  • 8697

Ruby for Rails 最佳实践Ⅰ

下载 Ruby:http://rubyforge.org/frs/?group_id=167 安装 Rails:gem install rails --remote 安装 Mysql 驱动:gem...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读Ruby for Rails的思考之Ruby的C扩展库
举报原因:
原因补充:

(最多只允许输入30个字)