I wrote an incredibly simple C extension for Ruby. Unfortunately, it can't find ruby.h
.
Here is the extconf.rb
:
require "mkmf"
$srcs = %w{hypergeometric.c}
$objs = %w{hypergeometric}
create_makefile("hypergeometric")
And here is the only source file:
#include <ruby.h> // have also tried #include "ruby.h", same error.
VALUE cHypergeometric;
void Init_hypergeometric() {
cHypergeometric = rb_define_module("Hypergeometric");
}
When I try to compile this, I get the following error:
../../../../ext/hypergeometric/hypergeometric.c:1:18: error: ruby.h: No such file or directory
Full gist. Note that line numbers are off because I've mostly commented out code instead of deleting it.
Interestingly, if I try to compile again without cleaning, I get a different error:
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
(The full output is again included in the gist above.)
Perhaps this is a clue?
Why can't it find ruby.h
? When I compile NMatrix or the SciRuby rb-gsl fork, both of these work fine and have no problem locating ruby.h
. (For the record, I wrote NMatrix, C extension and all -- and I based this particular extension on that one's extconf.rb
.)