2012-02-26 10 views
1

私はソケットプログラミングの基礎を学び、私が見つけたガイドからいくつかのコードを使用していますが、コンパイルエラーが発生しています。コードとエラーがgetaddrinfoでコンパイルエラー

#include <sys/types.h> 
#include <sys/socket.h> 
#include <netdb.h> 

#define PORT "21467" 

int main(void) 
{ 
int status; 
struct addrinfo hints; 
struct addrinfo *servinfo; // will point to the results 
memset(&hints, 0, sizeof hints); // make sure the struct is empty 

hints.ai_family = AF_INET; 
hints.ai_socktype = SOCK_STREAM; // TCP stream sockets 
hints.ai_flags = AI_PASSIVE; // fill in my IP for me 

if ((status = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) { 
    //fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status)); 
    exit(1); 
} 
// servinfo now points to a linked list of 1 or more struct addrinfos 
// ... do everything until you don't need servinfo anymore .... 
freeaddrinfo(servinfo); // free the linked-list 

return 0; 
} 

コンパイルエラーの下に表示されています

server.c: In function 'main': 
server.c:16: warning: incompatible implicit declaration of built-in function 'memset' 
server.c:24: warning: incompatible implicit declaration of built-in function 'exit' 
Undefined      first referenced 
symbol        in file 
getaddrinfo       /var/tmp//ccU0yRDe.o 
freeaddrinfo      /var/tmp//ccU0yRDe.o 
ld: fatal: Symbol referencing errors. No output written to a.out 
collect2: ld returned 1 exit status 

任意の助けをいただければ幸いです!

+0

@Ryaan:あなたがコンパイルに使用するコマンドやリンクのバージョンを指定した場合には参考になりますあなたのツールセットとオペレーティングシステム(私はOS Xと推測しています)。 –

+1

gcc 4.6.1のLinuxマシンで、#include と#include を追加してみましたが、それはokでコンパイルされ、警告も表示されません。どのOSとコンパイラを使用していますか? – jlemos

+0

これはgcc 4.2.1を実行しているUnix上で実行しています。それを含めて申し訳ありません。そしてそれらの2つのライブラリを含めた後、私は未定義のものが最初に参照され、以下ではエラーが出るだけです。 – Ryan

答えて

3

man memsetを実行すると、マニュアルページに#include <string.h>と表示されます。これをファイルの先頭に置いてください。リンクにexit

EDIT

必要性-lnsl -lsocketために同じことを行います(仮定のlinux)

+0

-lnsl -lsocketはSolarisのためのもので、ソケットのものは-lcにはありません(Linux */glibc)* –

+0

あなたの権利。私が持っているMakefileの間違った部分を読んだ。 –

+0

これは機能しました!ありがとう – Ryan

関連する問題