3

いくつかの c++ ライブラリを使用する Ruby C 拡張機能を構築しようとしています。問題は、単純な "hello world" を機能させることさえできないことです。

//hello_world.cpp
#include <ruby.h>


static VALUE tosCore;

static VALUE my_function( VALUE self )
{
    VALUE str = rb_str_new2( "Hello World!" );
    return str;
}

extern "C"
void Init_hello_world( void )
{    
    tosCore = rb_define_module("Core");
    rb_define_module_function(tosCore, "my_method", my_function, 0);   
}

私が得る出力は

compiling hello_world.cpp
hello_world.cpp: In function 'void Init_hello_world()':
hello_world.cpp:17:67: error: invalid conversion from 'VALUE (*)(VALUE) {aka lon
g unsigned int (*)(long unsigned int)}' to 'VALUE (*)(...) {aka long unsigned in
t (*)(...)}' [-fpermissive]
In file included from c:/Ruby200/include/ruby-2.0.0/ruby.h:33:0,
                 from hello_world.cpp:2:
c:/Ruby200/include/ruby-2.0.0/ruby/ruby.h:1291:6: error:   initializing argument
 3 of 'void rb_define_module_function(VALUE, const char*, VALUE (*)(...), int)'
[-fpermissive]
make: *** [hello_world.o] Error 1

私は C/C++ の専門家ではありません。Ruby は私の言語です。Riceで数千行の C++ を問題なくコンパイルしましたが、この特定の拡張機能を Windows でコンパイルしたいので、Rice はオプションではありません。

4

1 に答える 1