rpcgen only one argument is allowed 错误
rpcgen only one argument is allowed error
我正在使用 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
returns5
)。
但是,我今天再次进入 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
选项来允许多个参数。来自 documentation:
-N
Use the newstyle of rpcgen. This allows procedures to have multiple arguments. It also uses the style of parameter passing that closely resembles C. So, when passing an argument to a remote procedure you do not have to pass a pointer to the argument but the argument itself. This behaviour is different from the oldstyle of rpcgen generated code. The newstyle is not the default case because of backward compatibility.
在此功能之前,您传递多个参数的方式是将它们打包到一个结构中并传递一个指向该结构的指针。
我正在使用 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
returns5
)。
但是,我今天再次进入 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
选项来允许多个参数。来自 documentation:
-N
Use the newstyle of rpcgen. This allows procedures to have multiple arguments. It also uses the style of parameter passing that closely resembles C. So, when passing an argument to a remote procedure you do not have to pass a pointer to the argument but the argument itself. This behaviour is different from the oldstyle of rpcgen generated code. The newstyle is not the default case because of backward compatibility.
在此功能之前,您传递多个参数的方式是将它们打包到一个结构中并传递一个指向该结构的指针。