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