C程序调用C++函数,以及C++调用C函数

发布于:2024-04-28 ⋅ 阅读:(32) ⋅ 点赞:(0)

C调用C++的自定义函数

main.c如下,需要调用名为Utils.cc源文件里的Init()函数

#include "Utils_C_API.h"

int main(int argc, char* argv[]) {
    InitConnector();
    return 0;
}
先编译Utils.cc文件
g++ -fpic -shared Utils.cc -o libUtils.so

Utils.cc里的Init()函数

#include <iostream>

void Init() {
    std::cout << "Test" << std::endl;
}

调用的函数对应头文件Utils.h如下

#ifndef __UTILS_H__
#define __UTILS_H__

void Init();

#endif
再编译C的接口
g++ -fpic -shared Utils_C_API.cc -L. -lUtils -o libUtils_C_API.so

接口相关的源文件Utils_C_API.cc

#include "Utils_C_API.h"
#include "Utils.h"

#ifdef __cplusplus
extern "C" {
#endif
void InitConnector() {
    Init();
}
#ifdef __cplusplus
}
#endif

对应头文件

#pragma once

#ifdef __cplusplus
extern "C" {
#endif

void InitConnector();

#ifdef __cplusplus
}
#endif
最后编译成可执行程序
gcc main.c -L. -lUtils_C_API -o main -std=c11 -Wall -Wl,-rpath=./

可能有的版本GCC不需要-Wl,-rpath=./参数,这里版本是5.4,需要用来指定自定义的运行时候寻找的动态链接库目录

C++调用C自定义函数

main.cc

#include"test.h"
#include<iostream>
using namespace std;

int main(void)
{
    testCfun();
    return 0;
}

test.c

#include"test.h"
void testCfun()
{
    printf("Test\n");
    return;
}

test.h

#include<stdio.h>
#ifdef __cplusplus
extern "C"{
#endif

void testCfun();

#ifdef __cplusplus
}
#endif

有两种编译方法

gcc -c test.c
g++ main.cc test.o -o   main

或者

g++ main.cc test.c -o main