C语言工程调用C++库解决方案

本文详细介绍了如何在C语言工程中调用C++编写的库,包括自定义编写的库和第三方库的情况,提供了通用的编译和链接方法,确保C语言工程能正确使用C++库的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为C语言工程调用C++库的解决方案。

应用场景: 需要C++程序编译成的库提供函数接口,来解决C语言工程的需求。

想要快速解决问题,直接看 三、通用解决方法

人的出场顺序真的很重要,很多人如果换一个时间认识,换一个时间共处,一切都将是不一样的场景,不一样的结局。所以,人生有无限种可能,我的人生,是现在这一种。感谢大家恰到好处的出现,组成我最好的一种可能。

------ 大家好啊 我是 暮冬Z羡慕

一、C++库可以编辑的情况

C++库由自己编写,可以决定头文件书写的位置

// hello.cpp
#include "hello.h"
#include "iostream" //将用到的C++标准库,如iostream,放在本cpp文件中
using namespace std;
void sayHello(){
    cout<< " # iostream: i am saying hello !" << endl;
    printf(" # c: i am saying hello !\n");
}

创建 hello.cpp 文件,实现 sayHello() 功能,分别用C++标准库和C标准库的输入输出功能打印 hello!

①需要注意的是 “ 将C++标准库放在该cpp文件中”,原因后续指出。

// hello.h
#include "stdio.h"  // 这里不能出现C++标准库
void sayHello();

创建头文件 hello.h 这里可以添加C语言标准库,但是不要把C++标准库放在这里。

以上 hello.h 和 hello.cpp 模拟了C++库。为了使C语言工程能够调用该库,需要增加一个中间层:

// helloWapper.cpp
#include "helloWapper.h"
void Wapper_sayHello(){
        sayHello();
}

创建中间层 helloWapper.cpp , 对想要使用的C++库函数进行封装,即: 通过 Wapper_sayHello() 调用 sayHello()

// helloWapper.h
#include "hello.h"
#ifdef __cplusplus
extern "C"{
#endif
    void Wapper_sayHello();
#ifdef __cplusplus
}
#endif

 创建中间层头文件 helloWapper.h,暴露 Wapper_sayHello() 接口。中间出现的 extern "C" {} 是告诉G++编译器,对中间的函数按照C语言的方式进行编译。

然后将上述两个CPP文件编译成 静态库 ,使用的 CMakeLists.txt 文件如下:

cmake_minimum_required (VERSION 3.5)
project (demo)
include_directories (${PROJECT_SOURCE_DIR}/include ) # 指定头文件位置
set (test_call_LIST ${PROJECT_SOURCE_DIR}/src/hello.cpp
                    ${PROJECT_SOURCE_DIR}/src/helloWapper.cpp)  # 指定需要编译的CPP文件
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # 指定库输出路径
add_library(hello STATIC ${test_call_LIST}) # 编译

所有文件结构如下:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值