undefined reference to `mencpy' 怎么回事??

人若无名 2012-12-22 08:59:29
代码里已经加了头文件,贴代码如下:
1、dbserver.c文件:

#include "dbapi.h"
#include "socketwrapper.h"
#include "protocol.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

#define PORT 6666
#define IP_ADDR "127.0.0.1"
#define MAX_BUF_LEN 1024

tDatabase db = NULL;

int HandleRequests(tServiceHandler h);

int main()
{
/* Server Engine for Client's Connections */
tServiceHandler h = -1;
InitializeNetService(IP_ADDR,PORT); //accept lesten
while(1)
{
h = ServiceStart(); //accept
HandleRequests(h);
ServiceStop(h);
}
ShutdownNetService();
return 0;
}


int HandleRequests(tServiceHandler h)
{
char Buf[MAX_BUF_LEN] = "\0";
int BufSize = MAX_BUF_LEN;
TransCmd tc;
/* Handle Requests of One Client */
while(1)
{
BufSize = MAX_BUF_LEN;
if(RecvData(h, Buf, &BufSize) == 0)
{
fprintf(stderr,"Connection Error,%s:%d\n",__FILE__,__LINE__);
return -1;
}
if(BufSize == 0) //read nothing then continue read
{
continue;
}
mencpy(&tc, Buf, BufSize);
if(!strcmp(tc.cmd, "open"))
{
printf("open command\n");
printf("需要把结果返回给client端\n");
}
else
{
printf("不对,执行流错误!\n");
}
return 0;
}

2、socketswrapper.c文件如下:

#include"socketwrapper.h"
#include<stdio.h>
#include<stdlib.h>
#include<arpa/inet.h> /* internet socket */
#include<string.h>

int sockfd = -1;

/* private macro */
#define PrepareSocket(addr,port) \
struct sockaddr_in serveraddr; \
struct sockaddr_in clientaddr; \
socklen_t addr_len = sizeof(struct sockaddr); \
serveraddr.sin_family = AF_INET; \
serveraddr.sin_port = htons(port); \
serveraddr.sin_addr.s_addr = inet_addr(addr); \
memset(&serveraddr.sin_zero, 0, 8); \
sockfd = socket(PF_INET,SOCK_STREAM,0); \
if(sockfd == -1) \
{ \
fprintf(stderr,"Socket Error,%s:%d\n", \
__FILE__,__LINE__); \
close(sockfd); \
return -1; \
}
#define InitServer() \
int ret = bind( sockfd, \
(struct sockaddr *)&serveraddr, \
sizeof(struct sockaddr)); \
if(ret == -1) \
{ \
fprintf(stderr,"Bind Error,%s:%d\n", \
__FILE__,__LINE__); \
close(sockfd); \
exit(-1); \
} \
listen(sockfd,MAX_CONNECT_QUEUE);

#define InitClient() \
int ret = connect(sockfd, \
(struct sockaddr *)&serveraddr, \
sizeof(struct sockaddr)); \
if(ret == -1) \
{ \
fprintf(stderr,"Connect Error,%s:%d\n", \
__FILE__,__LINE__); \
exit(-1); \
}

/*
* InitServer
* input : addr - server ip address
* input : port - server port to open
* output : None
* in/out : None
* return : if SUCCESS return 0
* : if FAILURE return (-1)
*/
int InitializeNetService(char * addr,short int port)
{
PrepareSocket(addr,port);
InitServer();
return 0;
}
int ShutdownNetService()
{
if(sockfd == -1)
{
return -1;
}
close(sockfd);
return 0;
}
/*
* OpenRemoteService - Only used in Client side,it connects Server.
* input : addr - server ip address
* input : port - server port to open
* output : None
* in/out : None
* return : if SUCCESS return tServiceHandler
* : if FAILURE return (-1)
*/
tServiceHandler OpenRemoteService(char * addr,short int port)
{
PrepareSocket(addr,port);
InitClient();
return (tServiceHandler)sockfd;
}
/*
* CloseRemoteService - Only used in Client side,it terminate connection.
* input : h - it MUST BE what OpenRemoteService returns.
* output : None
* in/out : None
* return : if SUCCESS return 0
* : if FAILURE return (-1)
*/
int CloseRemoteService(tServiceHandler h)
{
if(h <= 0)
{
return -1;
}
close(h);
return 0;
}
/*
* ServiceStart - Only used in Sever side,when client connects it return.
* input : None
* output : None
* in/out : None
* return : if SUCCESS return tServiceHandler
* : if FAILURE return (-1)
*/
tServiceHandler ServiceStart()
{
struct sockaddr_in clientaddr;
socklen_t addr_len = sizeof(struct sockaddr);
int newfd = accept( sockfd,(struct sockaddr *)&clientaddr,&addr_len);
if(newfd == -1)
{
fprintf(stderr,"Accept Error,%s:%d\n", __FILE__,__LINE__);
}
return (tServiceHandler)newfd;
}
/*
* ServiceStop - Only used in Sever side,when client connects it return.
* input : h - it MUST BE what ServiceStart OR returns.
* output : None
* in/out : None
* return : if SUCCESS return 0
* : if FAILURE return (-1)
*/
int ServiceStop(tServiceHandler h)
{
if(h <= 0)
{
return -1;
}
close(h);
return 0;
}
/*
* SendData - send data to peer side
* input : h - it MUST BE what ServiceStart or OpenRemoteService returns.
* input : pBuf - point to data
* input : BufSize - the length of data bytes
* output : None
* in/out : None
* return : if SUCCESS return BufSize sended
* : if FAILURE return (-1)
* : if Connection Terminals return 0
*/
int SendData(tServiceHandler h,char * pBuf,int BufSize)
{
int ret = send(h,pBuf,BufSize,0);
if(ret < 0 || ret != BufSize)
{
fprintf(stderr,"Send Error,%s:%d\n",__FILE__,__LINE__);
return -1;
}
return ret;
}
/*
* SendData - send data to peer side
* input : h - it MUST BE what ServiceStart or OpenRemoteService returns.
* in/out : pBuf - point to memory that will store recved data
* in/out : pBufSize - the max length of data to recv
* return : if SUCCESS return BufSize recved
* : if FAILURE return (-1)
* : if Connection Terminals return 0
*/
int RecvData(tServiceHandler h,char * pBuf,int *pBufSize)
{
int ret = recv(h,pBuf,*pBufSize,0);
if(ret < 0)
{
fprintf(stderr,"Recv Error,%s:%d\n",__FILE__,__LINE__);
*pBufSize = 0;
return -1;
}
*pBufSize = ret;
return ret;
}

编译命令如下:
gcc -o dbserver dbserver.o socketwrapper.o

gcc提示错误:
dbserver.o: In function `HandleRequests':
dbserver.c:(.text+0x115): undefined reference to `mencpy'
collect2: ld 返回 1

dbserver.o socketwrapper.o这两个文件已经编译出来了,
为什么-o 链接成dbserver就提示undefined reference to `mencpy'错误呢??

请教各位大侠!!
...全文
392 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sundq12 2012-12-22
  • 打赏
  • 举报
回复
引用 1 楼 turingo 的回复:
拼写错误了应该是memcpy,而不是mencpy,你把m写成n了。
+++
图灵狗 2012-12-22
  • 打赏
  • 举报
回复
拼写错误了应该是memcpy,而不是mencpy,你把m写成n了。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧