【发布时间】:2015-03-08 09:35:39
【问题描述】:
我需要使用 C 代码扩展我的 ruby 代码。我的 c 文件上有这个功能:
char * generateIt(char *valor) {
struct NESSIEstruct w;
u8 digest[DIGESTBYTES];
int i;
for(i=0; valor[i]!='\0'; ++i);
int sizeo = i;
NESSIEinit(&w);
NESSIEadd((u8*)valor, 8*sizeo, &w);
NESSIEfinalize(&w, digest);
return displayIt(digest, DIGESTBYTES);
}
为了让 Ruby 可以在同一个文件中使用它,我有这个:
void
Init_whirlpool(){
rb_mWhirlpool = rb_define_module("Whirlpool");
rb_cClass = rb_define_class_under(rb_mWhirlpool, "Class", rb_cObject);
rb_define_method(rb_cClass, "generate", generateIt, 1);
}
但是,当我尝试 do run: make 时,我收到以下警告:
MacBook-Pro-de-Patricio:whirlpool psantos$ 编译 whirlpool.c whirlpool.c:2021:43:警告:传递 'char 的指针类型不兼容 *(char )' 到 'VALUE ()()' 类型的参数 [-Wincompatible-pointer-types] rb_define_method(rb_cClass, "生成", generateIt, 1); ^~~~~~~~~~ /Users/psantos/.rvm/rubies/ruby-2.0.0-p598/include/ruby-2.0.0/ruby/ruby.h:1290:48: 注意:在此处将参数传递给参数 void rb_define_method(VALUE,const char*,VALUE(*)(ANYARGS),int); ^ 生成 1 个警告。
错误图片:(更清楚)
我该如何解决这个问题?
【问题讨论】: