2011-03-08 87 views
2

我想编译rfuzz的c扩展名。我得到的错误是红宝石rfuzz编译错误1.9.2

make gcc -I. -I/usr/local/include/ruby-1.9.1/i686-linux -I/usr/local/include/ruby-1.9.1/ruby/backward -I/usr/local/include/ruby-1.9.1 -I. -D_FILE_OFFSET_BITS=64 -fPIC -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long -o http11_client.o -c http11_client.c 
http11_client.c: In function ‘client_http_field’: 
http11_client.c:36:22: error: ‘struct RString’ has no member named ‘ptr’ 
http11_client.c:36:50: error: ‘struct RString’ has no member named ‘len’ 
http11_client.c: In function ‘HttpClientParser_execute’: 
http11_client.c:218:23: error: ‘struct RString’ has no member named ‘ptr’ 
http11_client.c:219:23: error: ‘struct RString’ has no member named ‘len’ 
make: *** [http11_client.o] Error 1 

RSTRING是Ruby.h. ruby.h中的结构确实有这些成员。

struct RString { 
    struct RBasic basic; 
    union { 
     struct { 
      long len; 
      char *ptr; 
      union { 
       long capa; 
       VALUE shared; 
      } aux; 
     } heap; 
     char ary[RSTRING_EMBED_LEN_MAX + 1]; 
    } as; 
}; 

我错过了什么?

+1

+1提一个有趣的宝石。 – 2011-03-08 23:04:11

回答

0

我不知道红宝石的源代码;只是看你贴什么:

类型struct RString有2个成员:basic(类型struct RBasic)和as(无标记联合类型的)。

通过as标识的未加标签的联合具有2个成员:未标记的结构类型的heap和焦炭类型的阵列的ary

heap标识的未标记结构具有ptr成员。

左右到达它,​​你需要

struct RString x; 
x.as.heap.ptr; /* this is a char* */ 
2

貌似RFuzz不使用Ruby 1.9.2兼容。该RString定义1.9.2是因为你上市,但为1.8.7,它看起来像这样:

struct RString { 
    struct RBasic basic; 
    long len; 
    char *ptr; 
    union { 
     long capa; 
     VALUE shared; 
    } aux; 
}; 

相匹配什么RFuzz源似乎在寻找。因此,您可以使用RFuzz降到1.8,或者您可以尝试使用RFuzz来处理更新版本的Ruby。

RFuzz网站自2006年以来似乎没有更新过,因此可能无法继续维护。