[英]How to use headers in Unix Network Programming
我正在閱讀經典書籍Unix網絡編程,我遇到了一個關於編譯的問題。
例如,我可以正確編譯/home/song/unpv13e/tcpcliserv/tcpserv01.c 的源代碼。 在我將其復制到 /home/song/unpv13e/tcpcliserv/test.c 並制作 test.c 后,它提醒我錯誤,如下所示。
/tmp/ccI4xfzr.o: In function `main':
/home/song/unpv13e/tcpcliserv/test.c:11: 未定義引用Socket' /home/song/unpv13e/tcpcliserv/test.c:18: undefined reference to
Bind' /home/song/unpv13e/tcpcliserv/test .c:20: 未定義引用Listen' /home/song/unpv13e/tcpcliserv/test.c:21: undefined reference to
Signal' /home/yuhongsong/unpv13e/tcpcliserv/test.c:31: 未定義引用Close' /home/song/unpv13e/tcpcliserv/test.c:24: undefined reference to
Accept' 的Close' /home/song/unpv13e/tcpcliserv/test.c:24: undefined reference to
/home/song/unpv13e/tcpcliserv/test.c:26: 未定義對Fork' /home/song/unpv13e/tcpcliserv/test.c:27: undefined reference to
引用Fork' /home/song/unpv13e/tcpcliserv/test.c:27: undefined reference to
Close' /home/song/unpv13e/tcpcliserv/test.c:28: 未定義引用 `str_echo' collect2: 錯誤: ld 返回 1 退出狀態 make: *** [test] 錯誤 1
以大寫字母開頭的函數名在“unp.h”中定義。 問題出在哪里,如何解決,如何正確使用header。 源代碼如下所示:
#include "unp.h"
#include "sigchldwait.c"
int main(int argc, char **argv)
{
int listenfd, connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr, servaddr;
listenfd = Socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
Listen(listenfd, LISTENQ);
Signal(SIGCHLD, sig_chld);
for ( ; ; ) {
clilen = sizeof(cliaddr);
connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
if ( (childpid = Fork()) == 0) { /* child process */
Close(listenfd); /* close listening socket */
str_echo(connfd); /* process the request */
exit(0);
}
Close(connfd); /* parent closes connected socket */
}
}
這是一個鏈接問題,你需要鏈接到這個庫。
您可能針對此庫正確編譯(使用標頭),但您沒有在庫時提供庫。
如果您從源代碼獲取它,您甚至可能需要編譯它。
問題是默認 make test.c 等於gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o test.o test.c
.但是 test.c 需要一個靜態庫,其中函數例如接受來自。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.