我的问题如下:我正在尝试实现一个C RPC示例,并且我一直遇到以下编译器错误:
remote_exec.c: In function ‘main’:
remote_exec.c:13:3: warning: implicit declaration of function ‘svc_create’
remote_exec.o: In function `main':
remote_exec.c:(.text+0x31): undefined reference to `svc_create'
collect2: ld returned 1 exit status
我的代码:
#include <stdio.h>
#include <rpc/rpc.h>
#include "rls.h"
int main(int argc, char* argv[])
{
extern void execute();
const char* nettype = "tcp";
int no_of_handles;
no_of_handles = svc_create(execute, EXECPROG, EXECVERS, nettype);
svc_run();
return 0;
}
我真的不知道如何解决这个问题。手册页和我研究过的所有例子都说包含rpc / rpc.h,但它似乎不起作用。我正在编译
gcc -Wall -c
答案 0 :(得分:2)
libc中的linux上没有svc_create
这样的功能。请参阅rpc的联机帮助页。您的指南使用Solaris和其他unix的传输独立(ti)RPC库。有关linux的RPC指南,请参阅this问题。
linux中的RPC库基于与Sun的ti-RPC库略有不同的RPC库,尽管这里有一个ti-RPC库:http://nfsv4.bullopensource.org/doc/tirpc_rpcbind.php,如果您使用该库,则链接到-ltirpc
如果您使用的是glibc中包含的标准RPC库,则可能需要svctcp_create
或svcudp_create
。
答案 1 :(得分:0)
您可能必须在创建程序时链接到库。例如,如果库名为rpc
,则可以通过将-lrpc
添加到创建最终可执行文件的编译器命令行来完成。