Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2191
  • Last Modified:

how to use rpcgen

Hi,

I am trying to follow a tutorial on using rpcgen. I am new to the C language so I'm just trying to follow exactly as the tutorial says. Please see http://www.cs.cf.ac.uk/Dave/C/node34.html

When I get up to "cc msg_proc.c msg_svc.c -o msg_server -lnsl " i get the following error:

msg_proc.c:11: error: conflicting types for printmessage_1
msg.h:22: error: previous declaration of printmessage_1 was here

Can anybody tell me what I might be doing wrong? I have copied the code exactly from the website.

If its relevant I am using Ubuntu 8.04

Thanks,
Michael
0
mstrelan
Asked:
mstrelan
  • 4
  • 2
1 Solution
 
sunnycoderCommented:
Message simply means that you have two declaration of function printmessage_1 and both have different types.
If you check line number 11 in file msg_proc.c and line number 22 in msg.h you would see the two types. You need to resolve the error by using either one of those.

I have not looked through the entire page but I could not locate a msg.h on a quick scan. If you wrote that file, then  you might want to change the declaration in the msg.h file to match the definition in the .c file.
0
 
Infinity08Commented:
In msg_proc.c, the function's signature is this :

        int * printmessage_1(char **msg, struct svc_req *req)

Check the msg.h file (on the indicated line 22) to see if the function's signature is exactly the same there.
0
 
Infinity08Commented:
>> but I could not locate a msg.h on a quick scan.

msg.h is generated by rpcgen.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
Infinity08Commented:
If the above doesn't solve your problem, then you need to check for a typo you might have made in msg_proc.c (in the function's signature more specifically), and you should post your msg.x file.
0
 
mstrelanAuthor Commented:
thanks for your quick responses... msg.h is auto generated so I probably shouldn't be touching it. here is what I've got...
/* msg.h line 22: */
extern  int * printmessage_1(char **, CLIENT *);
 
 
/* msg_proc.c line 11: */
int * printmessage_1(char **msg, struct svc_req *req)
 
{

Open in new window

0
 
Infinity08Commented:
Depending on the platform, you might have to change the function name to printmessage_1_svc in the msg_proc.c file, so :

        int * printmessage_1_svc(char **msg, struct svc_req *req)
0
 
sunnycoderCommented:
what is the definition for CLIENT ? Can it be mapped to struct svc_req? If no then renaming the function in .c is the only option as I08 already said. Also if you need the declaration of the function in msg_proc.c file in some other source file, then you will have to include it using another manually generated .h file.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now