2012-10-30 5 views
1

RPC를 통해 사용할 수 있도록하는 절차를 등록해야하는이 간단한 서버가 있습니다. 나는 이러한 오류를 얻을 컴파일하려고하면'registerrpc'에 대한 정의되지 않은 참조

#include <rpc/rpc.h> 
int * p_double(int n){ 
    static int d; 
    d = 2 * n; 
    return &d; 
} 
int main(){ 
    registerrpc(0x22222222, 1, 1, p_double, xdr_int, xdr_int); 
    svc_run(); 
    return 0; 
} 

: 여기 내 server.c입니다

> gcc -o s server.c 
/tmp/ccd0Roxs.o: In function `main': 
server.c:(.text+0x47): undefined reference to `registerrpc' 
collect2: ld returned 1 exit status 

내가 그에게서 얻은 것은 어디 또는 적어도 rpc/rpc.h

에서 registerrpc을 찾을 수 있다는 것입니다

저는 우분투 12.04를 사용하고 있습니다. 제 반에서 다른 학생이 portmap을 설치하여 작동하도록했습니다. 그래서 똑같은 일을 시도했습니다. 불행히도 이것은 도움이되지 못했습니다.

당신은 당신은 RPC 라이브러리와 링크해야 registerrpc

+0

이 (옵션에 -Wall''추가) 'registerrpc'가 암시 적으로 선언되었다고 경고합니까? – Arkku

+0

예. 나는'server.c :(. text + 0x47) : 'registerrpc'에 대한 정의되지 않은 참조가 더 표현적 일 것이라고 생각했기 때문에 그것을 추가하지 않았다. –

+1

암시 적으로 선언 되었기 때문에'rpc/rpc. h이다. 올바른 _header_를 찾는 것은 올바른 라이브러리를 찾기 위해 먼 길을 갈 수도 있습니다. (또는 함수가 더 이상 사용되지 않고 그 헤더에서 다른 함수를 사용해야 할 수도 있습니다. 실제로는 rpc에 대해 알지 못합니다.) – Arkku

답변

1

사용중인 rpc 헤더에 registerrpc 기능이 정의되어 있지 않습니다. 나는 아마도 다른 운영 체제 (또는 이전 버전)를 기반으로 한 지침을 따르고 있다고 생각합니다. 가장 좋은 해결책은 rpc/rpc.h에있는 기능을 사용하여 동일한 작업을 수행하기위한 안내서를 찾는 것입니다.

그러나 우분투에 당신이 옵션을 apt-get install libtirpc-dev과 다른 RPC 라이브러리를 설치 한 다음 컴파일 할 수 있습니다 같다 : 당신이 더 많은 경고와 함께 컴파일하면

gcc -o server -I /usr/include/tirpc server.c -l tirpc 
+0

이것은 작동하는 것 같습니다. 고맙습니다 :) –

0

그것은 보이지 않는 (나는이 비록 여기에 속하는지 확인 미안하지 오전) :

$ gcc -Wall -lrpc server.c -o server 
+0

여기이 링크에서 registerrpc는 rpc/rpc.h에 속합니다. http : //linux.die.net/man/3/registerrpc –

+0

맞습니다. 헤더가 있지만 헤더가 참조하는 실제 라이브러리가 gcc 호출에 없습니다. 다음 링크를 보면 registerrpc가 들어있는 라이브러리에 연결하는 방법이 나와 있습니다. http://www.network-theory.co.uk/docs/gccintro/gccintro_17.html – cowboydan

+0

나는 알고 있습니다. 당신이 말한 것은 내가 rpc 라이브러리에 링크해야한다는 것입니다. 내가 어디에서 찾을 수 있는지 아십니까? –

2

이 들어있는 라이브러리, librpc를 참조처럼

+0

'/ usr/bin/ld : -lrpc을 찾을 수 없습니다 '라고 말합니다 –

+0

RPC 헤더와 라이브러리는 어디에 설치 했습니까? –

+0

실제로 헤더를 설치하지 않았습니다. 나는 그들이 OS와 함께 온 줄 알았다. –

관련 문제