Что это за ошибка, неопределенная ссылка на 'xdr_numbers' в RPC

power.x

struct numbers
{
  int number;
  int power;
};

program POWER_PROG {
    version POWER_VERS {
            int power(numbers) = 1;
    } = 1;
} = 0x31415926;

client.c

#include <stdlib.h>
#include <stdio.h>
#include <rpc/rpc.h>
#include "power.h"

main(argc, argv)
int argc;
char **argv;
{
CLIENT *cl; /* rpc handle */
char *server;

int *result;

    numbers num;


if (argc != 2) {
    fprintf(stderr, "usage:  %s hostname\n", argv[0]);
    exit(1);
}
server = argv[1];   /* get the name of the server */

result = (int *)malloc(sizeof(int));

/* create the client handle */
if ((cl=clnt_create(server, FACT_PROG, FACT_VERS, "udp")) == NULL) 
{
    /* failed! */
    clnt_pcreateerror(server);
    exit(1);
}



num.number=5;
num.power=3;

/* call the procedure bin_date */
if ((result=fact_1(&num, power, cl))==NULL) {
    /* failed ! */
    clnt_perror(cl, server);
    exit(1);
}
printf("Factorial returned from server is : %d\n", *result);

clnt_destroy(cl);   /* get rid of the handle */
exit(0);
}

server.c

 #include <rpc/rpc.h>
 #include "power.h"

 int temp;
 int *power_1_svc(numbers *num, struct svc_req *rqstp)
 {
    temp = 1;
    int i;

    for(i=1;i<=num->power;i++)
        temp = temp * (num->number);

    return &temp;
  }

В приведенном выше коде есть только одна ошибка:

/tmp/cc604P8X.o: In function `power_prog_1':
power_svc.c:(.text+0x4f): undefined reference to `xdr_numbers'
collect2: error: ld returned 1 exit status

Я скомпилировал файл power.x с помощью команды: rpcgen power.x Он сгенерировал все файлы. Но когда я попытался скомпилировать код сервера, выдает ошибку, описанную выше.

 gcc -o server.out -DPRC_SVC_FG server.c power_svc.c

Как устранить эту ошибку?

1 ответ

вы, скорее всего, забыли добавить в makefile файл xdr (тот, который содержит определение структуры):

       gcc -o server.out -DPRC_SVC_FG server.c power_svc.c power_xdr.c

вместоgcc -o server.out -DPRC_SVC_FG server.c power_svc.c

Другие вопросы по тегам