【发布时间】:2012-03-26 00:18:09
【问题描述】:
我只是尝试了书中的一个简单示例: 我有一个 sum.rb 文件:
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]。
这个例子有什么问题?
【问题讨论】:
-
我收到
/usr/include/ruby-1.9.1/ruby/ruby.h:24:25: fatal error: ruby/config.h: No such file or directory compilation terminated. -
@Tass 我迟到了一年,但是对于那些遇到同样问题的人,您需要在包含路径中添加
/usr/include/ruby/<your-architecture>或类似内容才能找到 config.h。一个简单的find /usr/include -name config.h就会找到正确的路径。