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'错误呢??

请教各位大侠!!
...全文
505 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sundq12 2012-12-22
  • 打赏
  • 举报
回复
引用 1 楼 turingo 的回复:
拼写错误了应该是memcpy,而不是mencpy,你把m写成n了。
+++
图灵狗 2012-12-22
  • 打赏
  • 举报
回复
拼写错误了应该是memcpy,而不是mencpy,你把m写成n了。
这个是完整源码 python实现 大数据 Spark pyspark 可视化大屏+Kafka+FastAPI+Vue3 【大数据毕业设计】基于Spark实时电商用户行为分析与预测(Python版本+pyspark+可视化大屏+Kafka+FastAPI+Vue3) 源码+论文 完整版 数据库Mysql 随着电子商务规模持续扩大,用户在浏览、加购、收藏与购买等环节产生的行为数据呈现高并发、高吞吐与强时效特征。传统离线批处理分析难以满足运营决策对实时性的要求。本文设计并实现了一套基于 Spark 的实时电商用户行为分析与预测系统,围绕“数据采集—流式计算—指标落库—可视化展示—销售预测”的完整链路展开研究与工程实践。 系统采用前后端分离架构:前端基于 Vue3、Element Plus 与 ECharts 构建管理端与数据大屏;后端采用 Python FastAPI 提供 RESTful 接口,并结合 JWT 完成管理员身份认证;实时链路以 Kafka 作为消息中间件承接行为事件,以 Spark Structured Streaming 完成按小时窗口的 PV、UV、加购、收藏、购买与销售额聚合;预测模块基于 Spark ML 线性回归对销售额序列进行建模,并输出 RMSE、MAE、MAPE 等误差指标。数据持久化采用 MySQL,数据库名为 db_ecommerce,核心业务表均以 t_ 前缀命名。 测试结果表明,系统能够稳定完成管理员登录、个人中心维护、行为与商品管理、实时统计展示、销售预测对比及流水线状态监控等功能,具备较好的可扩展性与教学示范价值,可为电商运营提供实时洞察与辅助决策支持。 本文的主要工作包括:完成系统需求分析与总体架构设计;绘制实体属性图与实体关系图并完成八张核心业务表设计;实现基于 Kafka 与 Spark 的实时统计及销售预测链路;完成 Vue

70,039

社区成员

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

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