Hi,
my program can’t be made properly,the qcc said:
qcc test_socket.c -o test
/tmp/AAA876583_cc.o: In function main': /tmp/AAA876583_cc.o(.text+0x10): undefined reference to
socket’
/tmp/AAA876583_cc.o(.text+0x81): undefined reference to bind' /tmp/AAA876583_cc.o(.text+0xb6): undefined reference to
listen’
/tmp/AAA876583_cc.o(.text+0x107): undefined reference to accept' /tmp/AAA876583_cc.o(.text+0x137): undefined reference to
inet_ntoa’
/tmp/AAA876583_cc.o(.text+0x167): undefined reference to `send’
cc: /usr/ntox86/bin/ld error 1
i think that i ignor something .
Who can help me?
here is my code:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define MYPORT 3490
#define BACKLOG 10
main()
{
int sockfd, new_fd; /* listen on sock_fd, new connection on new_fd /
struct sockaddr_in my_addr; / my address information /
struct sockaddr_in their_addr; / connector’s address information /
int sin_size;
if ((sockfd =socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror(“socket”);
exit(1);
}
my_addr.sin_family = AF_INET; / host byte order /
my_addr.sin_port = htons(MYPORT); / short, network byte order /
my_addr.sin_addr.s_addr = INADDR_ANY; / auto-fill with my IP /
bzero(&(my_addr.sin_zero)); / zero the rest of the struct */
if (bind(sockfd, (struct sockaddr )&my_addr, sizeof(struct
sockaddr))== -1)
{
perror(“bind”);
exit(1);
}
if (listen(sockfd, BACKLOG) == -1)
{
perror(“listen”);
exit(1);
}
while(1)
{ / main accept() loop */
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr )&their_addr,&sin_size))
== -1)
{
perror(“accept”);
continue;
}
printf(“server: got connection from %s\n”,
inet_ntoa(their_addr.sin_addr));
if (!fork())
{ / this is the child process /
if (send(new_fd, “Hello, world!\n”, 14, 0) == -1)
perror(“send”);
close(new_fd);
exit(0);
}
close(new_fd); / parent doesn’t need this /
while(waitpid(-1,NULL,WNOHANG) > 0); / clean up child processes */
}
}
You’re missing a libsocket.so. Add -lsocket to your command line, as shown
below. When the compiler sees the -l (ell) option, it will substitute in the
lib…<a|so>.
\
qcc test_socket.c -o test -lsocket
Cheers,
-Brian
“johnson zhou” <jszhou@yahoo.com> wrote in message
news:aq82vs$j09$1@inn.qnx.com…
Hi,
my program can’t be made properly,the qcc said:
qcc test_socket.c -o test
/tmp/AAA876583_cc.o: In function main': /tmp/AAA876583_cc.o(.text+0x10): undefined reference to
socket’
/tmp/AAA876583_cc.o(.text+0x81): undefined reference to bind' /tmp/AAA876583_cc.o(.text+0xb6): undefined reference to
listen’
/tmp/AAA876583_cc.o(.text+0x107): undefined reference to accept' /tmp/AAA876583_cc.o(.text+0x137): undefined reference to
inet_ntoa’
/tmp/AAA876583_cc.o(.text+0x167): undefined reference to `send’
cc: /usr/ntox86/bin/ld error 1
i think that i ignor something .
Who can help me?
here is my code:
#include <stdio.h
#include <stdlib.h
#include <errno.h
#include <string.h
#include <sys/types.h
#include <netinet/in.h
#include <sys/socket.h
#include <sys/wait.h
#define MYPORT 3490
#define BACKLOG 10
main()
{
int sockfd, new_fd; /* listen on sock_fd, new connection on new_fd /
struct sockaddr_in my_addr; / my address information /
struct sockaddr_in their_addr; / connector’s address information /
int sin_size;
if ((sockfd =socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror(“socket”);
exit(1);
}
my_addr.sin_family = AF_INET; / host byte order /
my_addr.sin_port = htons(MYPORT); / short, network byte order /
my_addr.sin_addr.s_addr = INADDR_ANY; / auto-fill with my IP /
bzero(&(my_addr.sin_zero)); / zero the rest of the struct */
if (bind(sockfd, (struct sockaddr )&my_addr, sizeof(struct
sockaddr))== -1)
{
perror(“bind”);
exit(1);
}
if (listen(sockfd, BACKLOG) == -1)
{
perror(“listen”);
exit(1);
}
while(1)
{ / main accept() loop */
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr )&their_addr,&sin_size))
== -1)
{
perror(“accept”);
continue;
}
printf(“server: got connection from %s\n”,
inet_ntoa(their_addr.sin_addr));
if (!fork())
{ / this is the child process /
if (send(new_fd, “Hello, world!\n”, 14, 0) == -1)
perror(“send”);
close(new_fd);
exit(0);
}
close(new_fd); / parent doesn’t need this /
while(waitpid(-1,NULL,WNOHANG) > 0); / clean up child processes */
}
}