C文件
#include <ctype.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <unistd.h>
#include <signal.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<assert.h>
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<fcntl.h>
#include<time.h>
#include<aio.h>extern "C" void funCPP();extern "C" void funC() {printf("funC, call funCPP\n");funCPP();
}
C++文件
#include <iostream>
#include <mutex>
#include <unistd.h>
#include <vector>
#include <algorithm>
#include <fstream>
#include <thread>
#include <string>
#include <functional>
#include <future>
#include <map>
#include <unordered_map>
#include <iostream> // std::cout
#include <future> // std::packaged_task, std::future
#include <chrono> // std::chrono::seconds
#include <thread> // std::thread, std::this_thread::sleep_for
#include <cstring>extern "C" void funC();
using namespace std;class Base {
public:Base() {cout << "base ctor" << endl;}virtual ~Base() {cout << "base dtor" << endl;}virtual void fun() {cout << "base fun" << endl;}
};class Drive: public Base {
public:Drive(): i(6) {cout << "Drive ctor" << endl;}virtual ~Drive() {cout << "Drive dtor" << endl;}void fun() override final {cout << "drive fun" << endl;}const int i = 5;};class Drive2 : public Drive {
public:Drive2() = default;//void fun() {// cout << "drive2 fun" << endl;
};extern "C" void funCPP() {Base* d = new Drive2;d->fun();cout << "funCPP" << endl;
}void fun1() {cout << "fun1" << endl;
}int main () {fun1();funC();return 0;
}
编译运行:
g++ -std=c++11 test.cpp test.c
./a.out
fun1
funC, call funCPP
base ctor
Drive ctor
drive fun
funCPP
主要利用了C++的语言链接声明 extern “C” void funCPP,使得funCPP以C方式进行编译链接,让C语言的代码能够找到funCPP接口。