undefined reference to `mencpy' 怎么回事??
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'错误呢??
请教各位大侠!!
相关推荐
政府科技管理者如何高效评估科技成果的市场转化潜力?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
产业园区运营负责人如何实现园区内创新资源的智能配置?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
科技中介服务机构在为中小企业提供技术对接服务时,如何解决信息盲区与匹配低效问题?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
电力系统风储联合一次调频仿真模型(Simulink仿真实现)
内容概要:本文提供了“电力系统风储联合一次调频仿真模型”的Simulink仿真实现方案,系统性地构建了风电与储能系统协同参与电力系统一次频率调节的动态仿真模型。该模型深度融合风力发电的波动性特征与储能系统的快速响应能力,设计了联合调频控制策略,通过Simulink平台实现了对电网频率扰动的精细化仿真分析。内容涵盖风储功率协调分配、逆变器控制(如VSG、下垂控制)、中点电位平衡、正负序分离、电网前馈补偿等关键技术模块,重点考察控制逻辑架构、关键参数整定及系统在动态工况下的频率响应性能,旨在验证风储联合系统在提升低惯量电网频率稳定性和调频效能方面的可行性与优越性。; 适合人群:具备电力系统分析、自动控制理论及新能源并网技术基础,熟练掌握Simulink/MATLAB仿真工具,从事电力系统稳定控制、新能源集成、储能应用等方向研究的研究生、科研人员及电力行业工程技术人员。; 使用场景及目标:①深入探究风电与储能系统在电网一次调频中的协同控制机理与能量管理策略;②对比分析不同控制算法(如下垂控制、VSG、MPC等)对频率调节效果的影响;③支撑学术论文复现、科研项目仿真验证及新型电力系统工程方案的前期可行性研究。; 阅读建议:建议结合电力系统频率控制相关经典文献与最新研究成果,逐步调试模型中的控制参数,重点关注风储出力协调性、控制延时、响应速度及弱电网条件对整体调频性能的影响,推荐通过多场景对比仿真以深化对系统动态行为的理解。
产业园区如何实现科技资源的统一管理和动态监测?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。


