环境
linux Centos 6.6
ruby 2.1.1
在 linux 环境下 通过 ruby 调用可执行文件、动态库 .so 文件
gem install dl
一、ruby 调用可执行文件
1:做好的文件代码 如 test.c 文件 编译后的 test_ruby 需要赋予可执行文件权限 命令:chmod 700 test_ruby
2:使用system()
函数调用 linux 命令 方式与在 shell 中使用是一样的
参考文件
http://blog.csdn.net/renwotao2009/article/details/51892300
http://www.jb51.net/article/59939.htm
http://www.2cto.com/os/201309/246511.html
二、ruby 调用动态库文件 (关键要知道你要调用的动态库文件的功能 参数 就是要知道接口是什么)
bash $> cat > sum.c <<EOF
double sum(double *arry, int len)
{
double ret = 0;
int i;
for(i = 0; i < len; i++){
ret = ret + arry[i];
}
return ret;
}
double split(double num)
{
double ret = 0;
ret = num / 2;
return ret;
}
EOF
bash $> gcc -o libsum.so -shared sum.c
bash $> cat > sum.rb <<EOF
require 'dl'
require 'dl/import'
module LibSum
extend DL::Importer
dlload './libsum.so'
extern 'double sum(double*, int)'
extern 'double split(double)'
end
a = [2.0, 3.0, 4.0]
sum = LibSum.sum(a.pack("d*"), a.count)
p LibSum.split(sum)
EOF
bash $> ruby sum.rb #=>4.5
参考文件
http://ju.outofmemory.cn/entry/142961
http://www.kuqin.com/rubycndocument/
http://www.kuqin.com/rubycndocument/man/addlib/index.html
http://www.kuqin.com/rubycndocument/man/addlib/dl.html
https://ruby-china.org/topics/20644
https://ruby-china.org/topics/7728
http://ruby-doc.org/stdlib-1.9.3/libdoc/dl/rdoc/DL.html#method-c-dlopen