linux平台中c代码调用c++动态库
来源:互联网 发布:中研世纪 知乎 编辑:程序博客网 时间:2024/05/24 01:49
- 首先,我们先需要添加一个外壳,外壳的功能是:将c++的类的方法进行包装,形成类似C语言的库函数
我们需要建立一个.cpp文件和一个头文件,例如:
HBShell.cpp:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "HrvBike.h"#include "HBShell.h"hrvBikeInterface *pInterface = NULL;//int isOk = 0;void initHrvInterface() { if (pInterface == NULL) { pInterface = new hrvBikeInterface(); }}//hrvBike.calHrvParamsMain(spath, despath, age, gender);void calHrvParamsMain(char* spath, char* despath, int age, int gender) { if (pInterface != NULL) { pInterface->calHrvParamsMain(spath, despath, age, gender); }}
HBShell.h:
#ifndef HB_SHELL#define HB_SHELLextern void initHrvInterface();extern void calHrvParamsMain(char* spath, char* despath, int age, int gender);#endif
- 编译动态库,考虑到代码是c++,所以编译指令最好用g++编译(否则再c调用的时候,可能会出现问题)
指令:
g++ HRVAnalysis.cpp HRVBasic.cpp hrvBike.cpp HRVParameters.cpp
HBShell.cpp -fPIC -m64 -shared -o libHrv.so
会在当前目录下生成libHrv.so的动态库。
- 编写调用该动态库的代码,该代码我们用c文件来实现,例如:
test.c:
#include <stdio.h>#include "HBShell.h"int main(){ initHrvInterface(); calHrvParamsMain("/usr/shareBike/hrvBike1.1/data/ecgdata.rr", "/usr/shareBike/hrvBike1.1/data/", 18, 1); if (getHrvFlag() == 1) { printf("getHighestHr---->%d\n", getHighestHr()); printf("getLowestHr---->%d\n", getLowestHr()); printf("getAvrHr---->%d\n", getAvrHr()); printf("getStressScore---->%d\n", getStressScore()); printf("getStressLevel---->%d\n", getStressLevel()); } return 0;}
这里需要注意,一定要将动态库里的HBShell.h这个头文件包含进来。否则会报错。
- 生成test.c的可执行文件,需要用指令:
g++ test.c -lHrv -L. -I. -o test
需要注意,这里请用g++编译,否则会造成c库和c++库函数引用的混乱。从而产生undefined reference之类的错误。
这里会生产test这样一个可执行文件,通过指令./test即可正常执行。
参考文档:
http://www.linuxidc.com/Linux/2013-11/93010.htm
0 0
- linux平台中c代码调用c++动态库
- python中调用动态链接库(C++,linux)
- linux平台下C语言调用python代码示例
- Linux下C如何调用动态库
- Linux下Python调用C动态库
- C调用动态库,windows/linux
- C程序中调用C++动态库
- X64 平台 C/C++调用汇编代码
- 动态调用动态库方法 c/c++ linux windows
- 动态调用动态库方法 c/c++ linux windows
- 动态调用动态库方法 c/c++ linux windows
- C代码中调用Ruby
- MATLAB中调用C代码
- matlab中调用C代码
- 在C#中调用C/C++代码
- Linux 中C文件调用C++代码的方法
- C++Linux平台动态加载类库实现类
- Linux中关于JAVA调用C生成的.so动态链接库
- 【工作笔记】ElasticSearch从零开始学(四)—— Java_DocumentAPI(CRUD)
- Django中如何实现数据库路由?
- 获取当前浏览器的类型和版本号
- Collatz序列的Python实现
- ioctl函数详解
- linux平台中c代码调用c++动态库
- getprop (dns)
- Linux--多线程读写锁问题
- win32判断当前进程是否是64位
- C很简单,但是你真的这些都会吗?
- 将 C++ Qt 程序移植至 Linux 系统
- nginx启动、停止、重启命令
- jeesz分布式架构技术springmvc+mybatis+shiro dubbo zookeeper redis分布式缓存 ehcache fastdfs restful 服务 maven
- 安装Piwik时遇到的一个奇怪的关于PHP参数问题的解决办法