2011-10-02 114 views
1

我的問題是這樣的:我想實現一個C RPC例子,我一直運行到以下編譯器錯誤:未定義參考svc_create

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

什麼是您的操作系統,以及您要遵循的示例是什麼操作系統? – Mat

+0

我使用的是Ubuntu 11.04。這些例子是針對linux。 – Tudor

+0

奇怪的是,我不認爲API存在於Linux上(我認爲這是Sun RPC)。鏈接到這個例子? – Mat

回答

2

在libc中linux上沒有這樣的函數svc_create。請參閱rpc的聯機幫助頁。您的指南正在使用Solaris和其他unix的傳輸無關(ti)RPC庫。有關Linux的RPC指南,請參閱this問題。

Linux中的RPC庫是基於一個稍微不同的RPC庫比Sun的TI-RPC庫,但有一個TI-RPC庫的位置:http://nfsv4.bullopensource.org/doc/tirpc_rpcbind.php,如果你使用該庫,你-ltirpc

鏈接

如果您使用glibc中包含的標準RPC庫,則可能需要svctcp_createsvcudp_create

+0

你說得對。我的錯。我沒有使用正確的功能。 :( – Tudor

0

當您創建程序時,您可能需要鏈接庫。例如,如果該庫名爲rpc,則可以通過將-lrpc添加到創建最終可執行文件的編譯器命令行來完成。