2018年6月

最近一个C项目需要调用一个C++的库,将调用过程简化一下写出来.

在c的代码main.c调用duck.cpp里的say()方法, 代码如下:

duck.h

#ifndef _DUCK_H_
#define _DUCK_H_

class Duck{
    public:
        void say();
};

#endif

duck.cpp

#include "duck.h"
#include <iostream>

using namespace std;

void Duck::say(){
    cout << "ga~ga~ga~" << endl;
}

animal.h

#ifndef _ANIMAL_H_
#define _ANIMAL_H_

#ifdef __cplusplus

#include "duck.h"

Duck duck;

extern "C" {
    void duckSay();
}

#endif
#endif

animal.cpp

#include "animal.h"
#include "duck.h"

void duckSay(){
    duck.say();
}

main.c

#include "animal.h"

void duckSay();

int main(void){
    duckSay();
}

编译

g++ -shared -o libduck.so animal.cpp duck.cpp 

gcc main.c ./libduck.so -o duck

./duck