1

何らかの理由で、このコード行は私にかなりの問題を与えています。

struct socketaddr_in clientaddr;

エラーメッセージは次のとおりです。

tiny.c:23:24: error: storage size of ‘clientaddr’ isn’t known

そのコード行を削除すると、次のエラーメッセージが表示されます。

s2s2@s2s2-ThinkPad-T61:~/Documents/Cprogramming/web_server$ make
gcc -std=gnu99 -O2 -lpthread -lrt -o server tiny.c csapp.c
/tmp/ccVxw07i.o: In function `Pthread_create':
csapp.c:(.text+0x7e5): undefined reference to `pthread_create'
/tmp/ccVxw07i.o: In function `Pthread_cancel':
csapp.c:(.text+0x805): undefined reference to `pthread_cancel'
/tmp/ccVxw07i.o: In function `Pthread_join':
csapp.c:(.text+0x825): undefined reference to `pthread_join'
/tmp/ccVxw07i.o: In function `Pthread_detach':
csapp.c:(.text+0x845): undefined reference to `pthread_detach'
/tmp/ccVxw07i.o: In function `Sem_init':
csapp.c:(.text+0x895): undefined reference to `sem_init'
/tmp/ccVxw07i.o: In function `P':
csapp.c:(.text+0x8b5): undefined reference to `sem_wait'
/tmp/ccVxw07i.o: In function `V':
csapp.c:(.text+0x8d5): undefined reference to `sem_post'
/tmp/ccVxw07i.o: In function `Pthread_once':
csapp.c:(.text+0x881): undefined reference to `pthread_once'
collect2: ld returned 1 exit status
make: *** [webServer-gcc] Error 1

csapp.cファイルとcsapp.hファイルへのリンクはのとおりです。

すべての助けをありがとう。

4

1 に答える 1

4

tiny.c:23:24: エラー: 'clientaddr' のストレージ サイズが不明です

C のように構造体を宣言する必要があるのには理由があります。struct structname instancenameこれは、C コンパイラが割り当てるメモリの量と、おそらくそのデータを整列する方法などを認識できるようにするためです。

socketaddr_inこれは、そのような構造体が存在しないことを伝える C コンパイラの方法ですsockaddr_in

このように構造体の命名を回避する一般的な方法は、次のように定義することです。

typedef struct _struct_name
{
    /* ... */
} structname;

その後、修飾子structnameなしで型として使用できます。struct構造体の定義でこれを行う必要はありません。後で行うこともできます。

したがって、短い答えはsocketaddr_in、POSIX の構造体として存在しません - それはsockaddr_in.

于 2012-06-16T12:57:16.477 に答える