2011-03-08 3 views
2

rfuzz의 c 확장을 컴파일하려고합니다. 내가 얻는 오류는루비 1.9.2에서 rfuzz 컴파일 오류가 발생했습니다.

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 흥미로운 보석을 언급합니다. –

답변

0

나는 루비 소스 코드를 모른다. 당신이 무엇을 게시 봄으로써 :

유형 struct RString 2 개 회원이 있습니다 basic (태그가 지정되지 않은 조합 유형) 및 as (유형 struct RBasic의 참조). 비 태그 형 구조체 heap과 CHAR 타입의 배열 ary :

as 식별 태그가없는 조합 2 부재를 갖는다.

heap에 의해 식별되는 태그없는 구조체는 ptr 멤버를가집니다.

그래서 당신이 RFuzz 루비 1.9.2와 호환되지 않습니다처럼

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

이 보이는 필요 그것에 도달한다. 당신이 열거 된 1.9.2에 대한 RString 정의는하지만 1.8.7 것은 다음과 같습니다

RFuzz 소스가 찾고있는 것 같다 것과 일치
struct RString { 
    struct RBasic basic; 
    long len; 
    char *ptr; 
    union { 
     long capa; 
     VALUE shared; 
    } aux; 
}; 

. 따라서 RFuzz를 사용하여 1.8으로 내려갈 수도 있고 RFuzz를 포팅하여 새로운 버전의 Ruby를 사용할 수도 있습니다.

RFuzz 웹 사이트는 2006 년부터 업데이트 된 것으로 보이지 않으므로 더 이상 유지 관리되지 않을 수 있습니다.

관련 문제