我为 Ruby 编写了一个非常简单的 C 扩展。不幸的是,它找不到ruby.h
.
这是extconf.rb
:
require "mkmf"
$srcs = %w{hypergeometric.c}
$objs = %w{hypergeometric}
create_makefile("hypergeometric")
这是唯一的源文件:
#include <ruby.h> // have also tried #include "ruby.h", same error.
VALUE cHypergeometric;
void Init_hypergeometric() {
cHypergeometric = rb_define_module("Hypergeometric");
}
当我尝试编译它时,我收到以下错误:
../../../../ext/hypergeometric/hypergeometric.c:1:18: error: ruby.h: No such file or directory
完整的要点。请注意,行号已关闭,因为我主要注释掉了代码而不是删除它。
有趣的是,如果我尝试在不清理的情况下再次编译,我会得到一个不同的错误:
ld: warning: ignoring file hypergeometric, file was built for unsupported file format ( 0x67 0x70 0x63 0x68 0x43 0x30 0x31 0x33 0x38 0x4b 0x73 0x92 0x3d 0xf1 0xa5 0x62 ) which is not the architecture being linked (x86_64): hypergeometric
(完整的输出再次包含在上面的要点中。)
也许这是一个线索?
为什么找不到ruby.h
?当我编译NMatrix或SciRuby rb-gsl fork时,它们都可以正常工作并且定位没有问题ruby.h
。(为了记录,我写了 NMatrix、C 扩展和所有的——我把这个特定的扩展基于那个extconf.rb
。)