Что это за ошибка, неопределенная ссылка на '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