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

devtools/2024/10/16 4:33:41/

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" {
#endifvoid 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"{
#endifvoid testCfun();#ifdef __cplusplus
}
#endif

有两种编译方法

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

或者

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

http://www.ppmy.cn/devtools/25883.html

相关文章

富格林:可信方针实现安全盈利

富格林指出&#xff0c;现货黄金一直以来都是投资者们追捧的热门品种之一。其安全性和保值增值的特性吸引着广大投资者。然而&#xff0c;要在现货黄金市场中取得成功并非易事&#xff0c;是需要一定的可信技巧和方针来支撑的。下面富格林将介绍一些关键的可信方针&#xff0c;…

【全开源】Java上门老人护理老人上门服务类型系统小程序APP源码

功能&#xff1a; 服务分类与选择&#xff1a;系统提供详细的老人护理服务分类&#xff0c;包括日常照护、康复训练、医疗护理等&#xff0c;用户可以根据老人的需求选择合适的服务项目。预约与订单管理&#xff1a;用户可以通过系统预约护理服务&#xff0c;并查看订单详情&a…

05_Scala运算符

文章目录 **1.Scala运算符****2.scala中没有 --等语法****3.逻辑运算符和Java完全相同****4.scala认为万物皆对象** 1.Scala运算符 Scala底层 使用的是equals() 程序员比较两个量的时候&#xff0c;谁来没事比较内存地址&#xff1f; Java中引用数据类型比较地址&#xff0…

责任链模式

责任链设计模式 定义 责任链模式为请求创建了一个接收者对象的链。允许将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。 请求在一个链条上处理,链条上的受理者处理完毕之后决定是继续往后传递还是中断当前处理流程…

【AIGC调研系列】LLaVA++整合Phi-3和Llama-3能够实现什么

LLaVA能够为Phi-3和Llama-3带来的主要好处包括&#xff1a; 视觉处理能力的增强&#xff1a;通过整合Phi-3和Llama-3模型&#xff0c;创建了具备视觉处理能力的Phi-3-V和Llama-3-V版本&#xff0c;这意味着这些模型现在能够理解和生成与图像相关的内容[1]。这种能力的增加&…

一个docker配置mysql主从服务器

这也就是因为穷&#xff0c;不然谁用一个docker配置主从&#xff0c;哈哈 既然成功了就记录下。过程挺折磨人的。 首先要保证你的电脑安装好了docker 为了保证docker当中主从能正常连网&#xff0c;现在docker里面创建一个网络环境 docker network create --driver bridge mysq…

富格林:正确手段阻挠虚假套路

富格林认为&#xff0c;现货黄金一直以来都拥有一大批支持者&#xff0c;这些投资者喜欢现货黄金市场很大一部分原因是觉得这个市场相对规律。为什么这么说呢&#xff1f;因为在现货黄金市场中只要严格遵循这些原则&#xff0c;既可以帮助我们阻挠虚假套路&#xff0c;更能助力…

设计模式:接口隔离原则(Interface Segregation Principle,ISP)介绍

接口隔离原则&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;是面向对象设计原则之一&#xff0c;它强调一个类不应该依赖于它不需要的接口。接口隔离原则的核心思想是将大的接口拆分成更小的、更具体的接口&#xff0c;客户端应该仅依赖于它们需要使…