Неопределенная ссылка на svc_create - PullRequest
1 голос
/ 02 октября 2011

Моя проблема заключается в следующем: я пытаюсь реализовать пример 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 ]

2 голосов
/ 02 октября 2011

В libc нет такой функции, как svc_create в linux. Смотрите man-страницу для rpc. Ваше руководство использует транспортно-независимую (ti) RPC-библиотеку Solaris и других юниксов. См. этот вопрос о руководствах RPC для linux.

Библиотека RPC в linux основана на несколько иной библиотеке RPC, чем библиотека ti-RPC от Sun, хотя здесь есть библиотека ti-RPC: http://nfsv4.bullopensource.org/doc/tirpc_rpcbind.php, если вы используете эту библиотеку, вы ссылаетесь с -ltirpc

Возможно, вам нужен svctcp_create или svcudp_create, если вы используете стандартную библиотеку RPC, включенную в glibc.

0 голосов
/ 02 октября 2011

Вы, вероятно, должны ссылаться на библиотеку при создании вашей программы. Например, если библиотека называется rpc, это можно сделать, добавив -lrpc в командную строку компилятора, которая создает конечный исполняемый файл.

...