[英]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.