Skip to main content
 首页 » 编程设计

c之rpc remote proceduer 编译错误

2023年11月22日14xing901022

我正在 linux 上开发一个 rpc 示例程序。当我尝试编译我的远程过程时,出现此错误:

msg_proc.c:10:7: error: conflicting types for ‘printmessage_1’ 
In file included from msg_proc.c:8:0: 
msg.h:22:15: note: previous declaration of ‘printmessage_1’ was here 

这是我用来编译的命令:

cc msg_proc.c msg_svc.c -o msg_server -lnsl 

这些是我的头文件和程序文件:

/*msg.h 
 * 
 * Please do not edit this file. 
 * It was generated using rpcgen. 
 */ 
 
#ifndef _MSG_H_RPCGEN 
#define _MSG_H_RPCGEN 
 
#include <rpc/rpc.h> 
 
 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
 
#define MESSAGEPROG 0x20000001 
#define PRINTMESSAGEVERS 1 
 
#if defined(__STDC__) || defined(__cplusplus) 
#define PRINTMESSAGE 1 
extern  int * printmessage_1(char **, CLIENT *); 
extern  int * printmessage_1_svc(char **, struct svc_req *); 
extern int messageprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); 
 
#else /* K&R C */ 
#define PRINTMESSAGE 1 
extern  int * printmessage_1(); 
extern  int * printmessage_1_svc(); 
extern int messageprog_1_freeresult (); 
#endif /* K&R C */ 
 
#ifdef __cplusplus 
} 
#endif 
 
#endif /* !_MSG_H_RPCGEN */ 
 
 
/* 
 * msg_proc.c: implementation of the 
 * remote procedure "printmessage" 
 */ 
 
#include <stdio.h> 
#include <rpc/rpc.h> 
#include "msg.h" 
 
int * printmessage_1(char **msg, struct svc_req *req) { 
    static int result; /* must be static! */ 
    FILE *f; 
 
    f = fopen("/dev/console", "w"); 
    if (f == (FILE *) NULL) { 
        result = 0; 
        return (&result); 
    } 
    fprintf(f, "%s\n", *msg); 
    fclose(f); 
    result = 1; 
    return (&result); 
} 

我的代码有什么问题?

请您参考如下方法:

printmessage_1 函数中的参数类型匹配 printmessage_1_svc 的声明,而不是 printmessage_1。 – 巴尔马尔