最近在弄一个进程间通信,原始测试demon用c语言写的,经过测试ok,然后把接口封装起来了一个send,一个recv。

使用的时候send端是在一个c语言写的http服务端使用,编译ok没有报错,但是recv的使用在QT里面是C++的,编译的时候出现

undefined reference to `recvIpcMsg(int, ipc_msg*)'

报错。

检查了头文件和实现文件都在,编译成动态库了都,同样的方法在C文件里调用都没有报错,搬到C++里面就都报错了,突然想起来一件事我的头文件声明没有对C++编译器专门处理。

如下:

/*
*ipcmsg.h */
#ifndef H_MSGIPC_H
#define H_MSGIPC_H

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define MSGKEY 8888
#define BUF_SIZE 64 typedef enum ipc_msg_type
{
APP_MSG,
INPUT_MSG,
GPS_MSG
}ipc_type; typedef struct msgIpc
{
ipc_type type;
char buf[BUF_SIZE];
}ipc_msg_t;
//send ipc msg
extern int sendIpcMsg(key_t msgkey, const ipc_msg_t *msg);
//recv ipc msg
extern int recvIpcMsg(key_t msgkey, ipc_msg_t *msg);
#endif

如果C的方法要在C++编译器里链接使用应该加上如下宏包含

#ifdef __cplusplus
extern "C" {
#endif #ifdef __cplusplus
}
#endif

如此才能正常编译链接。

最后修改如下就可以编过了

/*
*ipcmsg.h
*/
#ifndef H_MSGIPC_H
#define H_MSGIPC_H

#ifdef __cplusplus
extern "C" {
#endif

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

 

typedef enum ipc_msg_type
{
APP_MSG,
INPUT_MSG,
GPS_MSG
}ipc_type; typedef struct msgIpc
{
ipc_type type;
char buf[BUF_SIZE];
}ipc_msg_t;
//send ipc msg
extern int sendIpcMsg(key_t msgkey, const ipc_msg_t *msg);
//recv ipc msg
extern int recvIpcMsg(key_t msgkey, ipc_msg_t *msg);
 
#ifdef __cplusplus
}
#endif

#endif

最新文章

  1. 《高可用MySQL》2 – 单机版MySQL主从配置
  2. VC++ excel 2 operations
  3. python数字图像处理(7):图像的形变与缩放
  4. C#局域网桌面共享软件制作(一)
  5. UVALive 7070 The E-pang Palace 暴力
  6. CVE-2015-1635,MS15-034 漏洞测试
  7. 洛谷 P1331 海战
  8. 安装 SQL Server2008 安装程序规则支持提示“重新启动计算机”失败
  9. javascript中可处理的浮点数的最高精度(和小数的一些小特性)
  10. ofstream 使用的一点主意事项
  11. 用golang写的生成文件md5sum,检验文件md5sum
  12. POSIX多线程——基本线程管理函数介绍
  13. Radis安装
  14. 最短路和次短路问题,dijkstra算法
  15. 调用CMD命令的一个.NET工具类(MyWindowsCmd)
  16. mysql进阶(十九)SQL语句如何精准查找某一时间段的数据
  17. C#异步(下)
  18. [转]JAVA 根据经纬度算出附近的正方形的四个角的经纬度
  19. Spring之AOP在XML中的配置方法
  20. jq 事件取消绑定与重新绑定

热门文章

  1. ZBLOG PHP调用相关文章列表以及上一篇下一篇文章代码
  2. 我下载了python所有包,用以备份,有需要的自提
  3. PHP中的IMAP扩展简单入门
  4. PHP中的那些魔术常量
  5. PHP的引用计数是什么意思?
  6. supermvc介绍
  7. 数组转为unicode字符编码字符串
  8. httprunner环境准备:Pycharm创建httprunner项目
  9. django错误处理
  10. Hive On Spark保姆级攻略