我有一個練習,使用rpcgen
創建一個簡單的server-client
程序。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同樣的錯誤也爲廣場和num_of_dev功能,只給了例如strlen的。
謝謝!
謝謝,明白了! (意外刪除評論: 所以我需要實現'int * strlen_1_svc(char **,struct svc_req *);' 而不是'int * strlen_1(char **,CLIENT *);'?) –