我只是嘗試從一本書一個簡單的例子: 我有一個sum.rb文件:Ruby解釋器在C代碼嵌入
class Summer
def sum(max)
raise "Invalid maximum #{max}" if max < 0
(max*max + max)/2
end
end
而且一個embed_sum.c文件:
#include <stdio.h>
#include <ruby/ruby.h>
int main (int argc, char ** argv)
{
VALUE result;
ruby_sysinit(&argc, &argv);
RUBY_INIT_STACK;
ruby_init();
ruby_init_loadpath();
rb_require("sum");
rb_eval_string("$summer = Summer.new");
rb_eval_string("$result = $summer.sum(10)");
result = rb_gv_get("result");
printf("Result = %d\n", NUM2INT(result));
return ruby_cleanup(0);
}
的我編譯它:
gcc -Wall -lruby -I/usr/include/ruby-1.9.1/ embed_sum.c -o embed_sum
當我啓動./embed_sum它給我一個從第一個rb_eval_string分段錯誤。 我的ruby版本是:Archlinux上的ruby 1.9.3p125(2012-02-16修訂版34643)[x86_64-linux]。
這個例子有什麼問題?
喲dawg,我聽說你喜歡代碼,所以我們把一些代碼放在你的代碼中... – tbert 2012-03-08 14:36:08
我得到'/usr/include/ruby-1.9.1/ruby/ruby.h:24:25:fatal錯誤:ruby/config.h:沒有這樣的文件或目錄 編譯已終止。「 – Reactormonk 2012-03-08 14:41:20
@Tass我遲了一年,但對於遇到同樣問題的用戶,您需要添加'/ usr/include/ruby/'或類似於你的包含路徑以找到config.h。一個簡單的'find/usr/include -name config.h'會找到正確的路徑。 –
Vortico
2013-06-18 00:31:08