У меня есть упражнение для создания простой программы server-client
с использованием rpcgen
.rpcgen добавляет расширение _svc
Я пишу этот ex7.x
файл:
program REMOTE_PROG {
version MSG_RCV {
int STRLEN(string) = 1;
double SQUARE(double *) = 2;
int NUM_OF_DEV(int *) = 3;
} = 1;
} = 99;
выполняющихся с rpcgen ex7.x
-> генерирует ex7_svc.c
.
в файле ex7_svc.c
, по какой-то причине, он генерирует каждую функцию случай с _svc
расширения:
case STRLEN:
xdr_argument = xdr_wrapstring;
xdr_result = xdr_int;
local = (char *(*)()) strlen_1_svc; //<--_SVC
break;
и когда я пытаюсь скомпилировать сервер после реализации функций
int * strlen_1(char **, CLIENT *);
компилятор повышает эту погрешность:
"_strlen_1_svc", referenced from:
_remote_prog_1 in ex7_svc-8501b7.o
ld: symbol(s) not found for architecture x86_64
Но если я удалю это автоматически созданное расширение _svc, local = (char *(*)()) strlen_1; //no _svc
программа скомпилируется успешно.
Почему это происходит? почему rpcgen добавляет расширение _svc к функциям, и я делаю что-то неправильно, когда я удаляю _svc?
P.S такой же ошибки также для функций square и num_of_dev, например, даны только strlen.
Спасибо!
спасибо, получилось! (случайно удаленный комментарий: , поэтому мне нужно реализовать 'int * strlen_1_svc (char **, struct svc_req *);' вместо 'int * strlen_1 (char **, CLIENT *);'?); –