未定义对 svc_create 的引用

问题描述 投票:0回答:2

我的问题如下:我正在尝试实现一个 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
c gcc compiler-errors rpc
2个回答
2
投票

linux上libc中没有

svc_create
这样的函数。请参阅 rpc 的联机帮助页。您的指南正在使用 Solaris 和其他 UNIX 的传输独立 (ti) RPC 库。请参阅 this 问题了解 Linux 的 RPC 指南。

Linux 中的 RPC 库基于与 Sun 的 ti-RPC 库略有不同的 RPC 库,尽管这里有一个 ti-RPC 库:http://nfsv4.bullopensource.org/doc/tirpc_rpcbind.php ,如果您使用该库,则可以链接到

-ltirpc

如果您使用 glibc 中包含的标准 RPC 库,您可能需要

svctcp_create
svcudp_create


0
投票

当您创建程序时,您可能必须链接到该库。例如,如果库名为

rpc
,则可以通过将
-lrpc
添加到创建最终可执行文件的编译器命令行来完成。

© www.soinside.com 2019 - 2024. All rights reserved.