对`writen'的未定义引用
undefined reference to `writen'
我正在学习套接字编程,目前正在研究 ECHO 服务器代码。我收到这些错误:
serverecho.c:(.text+0x173): undefined reference to 'writen'
serverecho.c:(.text+0x180): undefined reference to 'print'
正在编译。我不确定我做错了什么。我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define SA struct sockaddr
#define MAXLINE 4096
int main(int argc, char *argv[])
{
int roockfd, confd;
pid_t childpid;
socklen_t len;
char buff[MAXLINE];
struct sockaddr_in servaddr, cliaddr;
roockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(roockfd, (SA *)&servaddr, sizeof(servaddr));
listen(roockfd, 5);
for (; ;) {
len = sizeof(cliaddr);
confd = accept(roockfd, (SA *)&cliaddr, &len);
printf("Connection from %s, port %d\n",
inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)),
ntohs(cliaddr.sin_port));
if ((childpid=fork())==0)
{
close(roockfd);
echoserv(confd);
exit(0);
}
close(confd);
}
}
echoserv(int sockfd) /* echoserv function */
{
ssize_t n;
char buff[MAXLINE];
again :
while((n=read(sockfd,buff,MAXLINE)>0))
writen(sockfd,buff,n);
if(n<0)
print("Error while reading");
}
使用 gcc 编译时出错:
root@kali:~/Desktop/cprogs# gcc serverecho.c -o serverecho.out -lm
/tmp/ccWL7GLc.o: In function 'echoserv':
serverecho.c:(.text+0x173): undefined reference to 'writen'
serverecho.c:(.text+0x1b9): undefined reference to 'print'
collect2: error: ld returned 1 exit status
您的代码中有一些拼写错误。使用 write
而不是 writen
,使用 printf
而不是 print
。如果您不引用这些函数,请确保正确包含它们,以便编译器知道在哪里可以找到它们。
使用这个:
write(sockfd,buff,n);
因为 writen
不是 C 中的预定义函数。因此,当您编译程序时,您会得到对 `writen' 的未定义引用。
也做 printf("Error while reading");
而不是 print()
。
我正在学习套接字编程,目前正在研究 ECHO 服务器代码。我收到这些错误:
serverecho.c:(.text+0x173): undefined reference to 'writen'
serverecho.c:(.text+0x180): undefined reference to 'print'
正在编译。我不确定我做错了什么。我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define SA struct sockaddr
#define MAXLINE 4096
int main(int argc, char *argv[])
{
int roockfd, confd;
pid_t childpid;
socklen_t len;
char buff[MAXLINE];
struct sockaddr_in servaddr, cliaddr;
roockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(roockfd, (SA *)&servaddr, sizeof(servaddr));
listen(roockfd, 5);
for (; ;) {
len = sizeof(cliaddr);
confd = accept(roockfd, (SA *)&cliaddr, &len);
printf("Connection from %s, port %d\n",
inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)),
ntohs(cliaddr.sin_port));
if ((childpid=fork())==0)
{
close(roockfd);
echoserv(confd);
exit(0);
}
close(confd);
}
}
echoserv(int sockfd) /* echoserv function */
{
ssize_t n;
char buff[MAXLINE];
again :
while((n=read(sockfd,buff,MAXLINE)>0))
writen(sockfd,buff,n);
if(n<0)
print("Error while reading");
}
使用 gcc 编译时出错:
root@kali:~/Desktop/cprogs# gcc serverecho.c -o serverecho.out -lm /tmp/ccWL7GLc.o: In function 'echoserv':
serverecho.c:(.text+0x173): undefined reference to 'writen'
serverecho.c:(.text+0x1b9): undefined reference to 'print'
collect2: error: ld returned 1 exit status
您的代码中有一些拼写错误。使用 write
而不是 writen
,使用 printf
而不是 print
。如果您不引用这些函数,请确保正确包含它们,以便编译器知道在哪里可以找到它们。
使用这个:
write(sockfd,buff,n);
因为 writen
不是 C 中的预定义函数。因此,当您编译程序时,您会得到对 `writen' 的未定义引用。
也做 printf("Error while reading");
而不是 print()
。