2011-03-08 73 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年以來似乎沒有更新過,因此可能無法繼續維護。