【问题标题】:rpcgen only one argument is allowed errorrpcgen only one argument is allowed 错误
【发布时间】:2021-06-20 07:39:32
【问题描述】:

我正在使用 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;
}

其他功能与不同的运算符完全相同(-*/)。我做错了什么?

【问题讨论】:

    标签: c makefile rpc


    【解决方案1】:

    您需要使用-N 选项来允许多个参数。来自documentation

    -N
    使用新风格的 rpcgen。这允许过程有多个参数。它还使用与 C 非常相似的参数传递风格。因此,在将参数传递给远程过程时,您不必传递指向参数的指针,而是传递参数本身。此行为与 rpcgen 生成代码的旧样式不同。由于向后兼容,newstyle 不是默认情况。

    在此功能之前,您传递多个参数的方式是将它们打包到一个结构中并传递一个指向该结构的指针。

    【讨论】:

    • 是的!而已!我在生成模板时使用了-NCa,但在制作二进制文件时却没有。我使用了make CFLAGS+="-I/usr/include/tirpc -ltirpc" RPCGENFLAGS+="-N" -f Makefile.calculadora,它奏效了。非常感谢!
    猜你喜欢
    • 2019-03-04
    • 2018-06-11
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多