c - rpcgen only one argument is allowed 错误
问题描述
我正在用 rpcgen 编写一个简单的客户端-服务器计算器,但出现编译错误。这是.x
文件(calculadora.x
):
union resultado_calculo switch (int err)
{
case 0:
int resultado;
default:
void;
};
program CALCULADORA_PROG
{
version CALCULADORA_VER
{
resultado_calculo Suma (int, int) = 1;
resultado_calculo Resta (int, int) = 2;
resultado_calculo Producto (int, int) = 3;
resultado_calculo Cociente (int, int) = 4;
} = 1;
} = 20000001;
运行rpcgen -NCa calculadora.x
会创建以下文件:
total 40K
drwxr-xr-x 2 groctel groctel 4.0K Mar 23 16:40 .
drwxr-xr-x 3 groctel groctel 4.0K Mar 23 16:10 ..
-rw-r--r-- 1 groctel groctel 1.3K Mar 23 16:27 calculadora_client.c
-rw-r--r-- 1 groctel groctel 1.9K Mar 23 16:22 calculadora_clnt.c
-rw-r--r-- 1 groctel groctel 1.1K Mar 23 15:56 calculadora_server.c
-rw-r--r-- 1 groctel groctel 3.5K Mar 23 16:22 calculadora_svc.c
-rw-r--r-- 1 groctel groctel 1.2K Mar 23 16:23 Makefile.calculadora
-rw-r--r-- 1 groctel groctel 2.7K Mar 23 16:22 calculadora.h
-rw-r--r-- 1 groctel groctel 348 Mar 23 16:22 calculadora.x
现在,我已经填写了客户端和服务器的模板并运行了几次程序。我必须编译make CFLAGS+="-I/usr/include/tirpc -ltirpc" -f Makefile.calculadora
以包含我系统的 rpc 库,但那里没有真正的问题。我也运行了几次程序,所有操作都运行良好(例如./calculadora 3 + 2
返回)。5
但是,我make
今天再次进入程序,得到以下输出:
➜ make CFLAGS+="-I/usr/include/tirpc -ltirpc" -f Makefile.calculadora
rpcgen calculadora.x
resultado_calculo Suma (int, int) = 1;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
calculadora.x, line 13: only one argument is allowed
make: *** [Makefile.calculadora:32: calculadora_xdr.c] Error 1
我不明白为什么现在出现错误而不是以前出现错误,因为该程序昨天才完美运行。这Suma
是我正在编译的函数:
resultado_calculo *
suma_1_svc(int arg1, int arg2, struct svc_req *rqstp)
{
static resultado_calculo result;
xdr_free(xdr_resultado_calculo, &result);
result.resultado_calculo_u.resultado = arg1 + arg2;
return &result;
}
-
其他功能与不同的运算符(*
和)完全相同/
。我究竟做错了什么?
解决方案
您需要使用该-N
选项来允许多个参数。从文档中:
-N
使用新样式的 rpcgen。这允许过程有多个参数。它还使用与 C 非常相似的参数传递风格。因此,在将参数传递给远程过程时,您不必传递指向参数的指针,而是传递参数本身。此行为与 rpcgen 生成代码的旧样式不同。由于向后兼容,newstyle 不是默认情况。
在此功能之前,您传递多个参数的方式是将它们打包到一个结构中并传递一个指向该结构的指针。
推荐阅读
- r - furrr 不会从全局环境中自动解析 S3 泛型方法
- express - 会话 cookie (sid) 不是在生产模式下创建的 redux saga
- flutter - 如何修复 Flutter 预期类型为“Map”的值
',但得到了“列表”类型之一 ' - python - 根据两列值在 Python DataFrame(1,0) 中创建 True/False 列
- python - 同一类中的python网络爬行
- apache-kafka - 即使先前的消息手动提交,kafka 消费者也没有从主题中获取消息
- javascript - JS SSE:无法在 onMsg 回调函数之外访问 event.data?
- swift - Firebase iOS 单击缩短的链接返回“接收失败并出现错误“软件导致连接中止””
- algorithm - 平衡二叉树高度的大 O
- r - 如何对数据中的多个组进行网格搜索?