对svc_create的未定义引用

时间:2011-10-02 13:36:10

标签: c gcc compiler-construction compiler-errors rpc

我的问题如下:我正在尝试实现一个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

2 个答案:

答案 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_createsvcudp_create

答案 1 :(得分:0)

您可能必须在创建程序时链接到库。例如,如果库名为rpc,则可以通过将-lrpc添加到创建最终可执行文件的编译器命令行来完成。