专栏首页程序手艺人C语言中调用C++

C语言中调用C++

因项目中需要更新VAD算法,VAD使用C++实现的. 代码框架中需要使用C调用C++来实现对VAD的调用.

C++调用C很方便, 如果C调用C++,主要思想是将C++的动态库封装一层,这一层采用C语言实现,主要封装C++中的类

示例

  • test_class.h
#ifndef TESTCLASS_H
#define TESTCLASS_H
#include<iostream>
#include<stdio.h>

class ValueClass
{

private:
    int value;
    int sum;
public:
    ValueClass();
    void Add(int i, int j);
};

#endif 
  • test_class.cpp
#include "test_class.h"
ValueClass::ValueClass(){
    printf("hello world \n");
}
void ValueClass::Add(int i, int j){
    sum = i+j;
    printf("sum : %d value : %d\n",sum,value);
}
  • 编程生成动态库   g++ test_class.cpp -shared -o libtestclass.so -I./ -fPIC

封装层

  • TestWrapper.h
#ifndef _TEST_WRAPPER_H
#define _TEST_WRAPPER_H

#ifdef __cplusplus
extern "C" {
#endif 

void myValueClass(int a, int b);

#ifdef __cplusplus
}
#endif 
#endif 
  • TestWrapper.c
#include "TestWrapper.h"
#include "test_class.h"

#ifdef __cplusplus
extern "C" {
#endif 

void myValueClass(int a, int b){
    ValueClass t;
    t.Add(a,b);
}

#ifdef __cplusplus
};
#endif 
  • 编译成动态库  g++ TestWrapper.c -shared -o libmyclass.so -L./ -ltestclass -fPIC -Xlinker -rpath=./

主函数

  • main.c
#include "TestWrapper.h"
int main()
{
    myValueClass(1,2);
}
  • 编译 gcc main.c -o main -lmyclass -L./ -I . -Xlinker -rpath=./

该方法比较方便,也有其他方法实现,可以 如何用C语言封装 C++的类,在C里面使用

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C与C++的升级关系

    程序手艺人
  • Linux下音频设备的操作

    1 OSS(Open Sound System)是unix平台上一个统一的音频接口。

    程序手艺人
  • mbed TLS 简明教程(三)

    程序手艺人
  • 天梯赛初赛 进阶题 题解

    L2-009 抢红包 题目链接: https://www.patest.cn/contests/gplt/L2-009 简单题,结构体排序 #include...

    ShenduCC
  • 14:大小写字母互换

    这题,,,,,, 坑。,,,,, 必须用printf输出。。。。。。 #include<iostream> #include<cstring> #include...

    attack
  • P1168 中位数

    题目描述 给出一个长度为N的非负整数序列A[i],对于所有 ]的中位数。 个数的中位数。 输入输出格式 输入格式: 输入文件median.in的第1...

    attack
  • 数据可视化-Matplotlib在线图上填充区域

    今天我们将学习如何填充Matplotlib中的线图。这不仅可以使我们的图表看起来更专业,而且我们还可以通过根据特定阈值填充区域来添加有用信息。

    亚乐记
  • 简单易学的机器学习算法——极限学习机(ELM)

           极限学习机(Extreme Learning Machine) ELM,是由黄广斌提出来的求解单隐层神经网络的算法。

    zhaozhiyong
  • python中的文件读写

    读写文件是日常开发中最高频的操作,从文件中读取你需要处理的数据,根据处理逻辑编写代码,将处理好之后的结果保存到结果文件中。

    生信修炼手册
  • 泰勒公式和Gamma函数

    泰勒公式,也称泰勒展开式。是用一个函数在某点的信息,描述其附近取值的公式。如果函数足够平滑,在已知函数在某一点的各阶导数值的情况下,泰勒公式可以利用这些导数值来...

    润森

扫码关注云+社区

领取腾讯云代金券