C 未定义对'的引用;插座';在VxWorks平台上
我正在使用Vxworks 653平台,我已经创建了一个应用程序分区。我想在应用程序分区上创建一个服务器,在构建它之后,我会收到错误 未定义对“套接字”的引用,未定义对“绑定”的引用 如果是链接器错误或我丢失了什么,我该怎么办 守则:C 未定义对'的引用;插座';在VxWorks平台上,c,vxworks,C,Vxworks,我正在使用Vxworks 653平台,我已经创建了一个应用程序分区。我想在应用程序分区上创建一个服务器,在构建它之后,我会收到错误 未定义对“套接字”的引用,未定义对“绑定”的引用 如果是链接器错误或我丢失了什么,我该怎么办 守则: # include "vxWorks.h" # include "sockLib.h" # include "sys/socket.h" # include "netinet/in.h
# include "vxWorks.h"
# include "sockLib.h"
# include "sys/socket.h"
# include "netinet/in.h"
# include "inetLib.h"
# include "ioLib.h"
# include "string.h"
# include "stdio.h"
# include "taskLib.h"
/* typedefs */
typedef int SOCK_FD;/*
/* forward declarations */
LOCAL void error(char* str);
/******************************************************************************
*
* vxServer - processes UDP client requests
*
* This routine sits in an infinite loop handling client requests.
* When a request is received, the client's data is converted
* to the local byte-ordering and then displayed. Next,
* a reply is sent to the client. Then the server will process
* the next request or block if there is none.
*/
void vxServer(u_short port)
{
int clientAddrLength;
SOCK_FD sockFd;
struct sockaddr_in clientAddr;
struct sockaddr_in srvAddr;
char inetAddr[INET_ADDR_LEN];
u_short clientPort;
char* reply = "Here is your reply\n";
int val;
clientAddrLength = sizeof (clientAddr);
/* Create a socket */
if ((sockFd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
error("Socket failed");
/*
* Bind to a well known address. INADDR_ANY says
* any network interface will do. htonX()
* routines put things in network byte order.
*/
bzero((char*)&srvAddr, sizeof(srvAddr));
srvAddr.sin_family = AF_INET;
srvAddr.sin_port = htons(port);
srvAddr.sin_addr.s_addr = INADDR_ANY;
if (bind (sockFd, (struct sockaddr *) &srvAddr, sizeof(srvAddr)) < 0)
{
close(sockFd);
error("Bind failed");
}
FOREVER
{
if (recvfrom (sockFd, (char*) &val, sizeof(val), 0,
(struct sockaddr *) &clientAddr,
&clientAddrLength) < 0)
{
close(sockFd);
error("recvfrom failed");
}
val = ntohl(val);
inet_ntoa_b(clientAddr.sin_addr, inetAddr);
clientPort = ntohl(clientAddr.sin_port);
printf("Message received from client "
"(port = %d, inet = %s):\n",
clientPort, inetAddr);
printf("%d\n", val);
if (sendto (sockFd, reply, strlen(reply) + 1,
0,(struct sockaddr *) &clientAddr,
clientAddrLength) < 0)
{
close(sockFd);
error("sendto failed");
}
}
}
void error(char* str)
{
perror(str);
exit(1);
}
#包括“vxWorks.h”
#包括“sockLib.h”
#包括“sys/socket.h”
#包括“netinet/in.h”
#包括“inetLib.h”
#包括“ioLib.h”
#包括“string.h”
#包括“stdio.h”
#包括“taskLib.h”
/*typedefs*/
typedef int SOCK_FD;/*
/*转发声明*/
局部无效错误(字符*str);
/******************************************************************************
*
*vxServer-处理UDP客户端请求
*
*此例程位于处理客户端请求的无限循环中。
*当收到请求时,将转换客户端的数据
*到本地字节顺序,然后显示。下一个
*将向客户端发送回复。然后服务器将处理
*下一个请求或块(如果没有)。
*/
无效vxServer(u_短端口)
{
int clientaddress长度;
SOCK_FD sockFd;
clientAddr中的结构sockaddr_;
srvAddr中的结构sockaddr_;
char inetAddr[INET_ADDR_LEN];
u_短客户端端口;
char*reply=“这是您的答复\n”;
int-val;
clientaddlength=sizeof(clientAddr);
/*创建套接字*/
如果((sockFd=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP))<0)
错误(“套接字失败”);
/*
*绑定到一个众所周知的地址。INADDR_ANY说
*任何网络接口都可以。htonX()
*例程将事物按网络字节顺序排列。
*/
bzero((char*)&srvAddr,sizeof(srvAddr));
srvAddr.sin_family=AF_INET;
srvAddr.sinu端口=htons(端口);
srvAddr.sin\u addr.s\u addr=INADDR\u ANY;
if(bind(sockFd,(struct sockaddr*)&srvAddr,sizeof(srvAddr))<0
{
关闭(sockFd);
错误(“绑定失败”);
}
永远
{
if(recvfrom(sockFd,(char*)&val,sizeof(val),0,
(结构sockaddr*)和客户端地址,
&clientAddressLength)<0)
{
关闭(sockFd);
错误(“recvfrom失败”);
}
val=ntohl(val);
inet_ntoa_b(clientAddr.sin_addr,inetAddr);
clientPort=ntohl(clientAddr.sinu端口);
printf(“从客户端收到的消息”
“(端口=%d,inet=%s):\n”,
客户端端口,inetAddr);
printf(“%d\n”,val);
如果(发送到)(sockFd,回复,strlen(回复)+1,
0,(结构sockaddr*)和clientAddr,
clientAddressLength)<0)
{
关闭(sockFd);
错误(“发送失败”);
}
}
}
无效错误(字符*str)
{
perror(str);
出口(1);
}
现在我对VxWorks Helix比旧的VxWorks 653更为熟悉,但是您是否检查了INCLUDE_SOCKLIB组件是否已添加到您的项目中,或者套接字层是否已添加到您的VSB中
通常,当出现链接器错误(如您描述的错误)时,项目中缺少组件和/或VSB中缺少层。您使用Berkeley套接字函数。可能您必须添加相应的库。如何做到这一点取决于框架。不幸的是,我不能为VxWorks提供建议您还可以确定问题的标题。它不是
Socket
函数,而是Socket
。语言C
区分大小写。