您的位置:首页 > 编程语言 > C语言/C++

实现 C调用 C++ 函数

2013-04-11 18:13 267 查看
c 调用 c++ 函数

1. myMgr.cpp : 可以是一个普通的纯C++ 函数,

或者是在QT开发环境中的带有<QObject> 等头文件的C++类函数;

2. myMidProvider.h : 利用如下格式声明即将被C调用的函数;

#ifdef __cplusplus

extern "C" {

#endif

int retrieveTopRatingApp(HitoApps_t **retList, int iNum, int* appCount);

#ifdef __cplusplus

}

#endif

myMidProvider.cpp : 主要是接收C函数传过来的参数,
按照需求将调用retrieveTopRatingApp函数的返回值用C还原.
如返回的是一个类,则用C语言支持的结构体存放原本类中的数据,以供C函数调用;
3. 编辑 C++函数成.SO 文件,移动至 /usr/lib64/(lib)目录下,

myTest.c:包含“myMidProvider.h”头文件,即可调用定义在C++中的函数;

(若在qt等编辑器中,在SOURCES 包含myTest.c ,在HEADERS 包含myTest.h,执行c函数调用C++函数;)

编译C++文件成.so

1. 普通的纯C++函数,可在终端下利用 g++ -shared -fPIC -o a.so a.cpp 编译.so;

依赖 a.so 编译 b.so; g++ -shared -fPIC -o b.so b.cpp -la

同时编译: g++ -shared -fPIC -o b.so a.cpp b.cpp(移动至/usr/lib(lib64))

在终端下,编译C函数: gcc xxx.c -o test -lb

2. 在QT中,在.pro中, 将TEMPLATE = app 改成 TEMPLATE = lib;

编译命令: make distclean -> qmake-qt4 xxx.pro ->将生成的一系列的libxx.so 移至/usr/lib(lib64)中;

例子: AppCenterUtil.zip

C++调用C函数

只需要包含对应c的头文件即可;

如:

extern "C"

{

#include "a.h"

}

fmoonstar 更新至2013/05/17
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: