c++筑器 c和c++静态库动态库互调

简介: c++筑器 c和c++静态库动态库互调

文章目录



c++筑器 c与c++静态库互调

vs19下静态库动态库互调

C++调C

我们就用以前的括号匹配做例子。当时我们是用栈来操作的,然后在我们真正需要执行的函数前把栈的函数一一的写出来,这样的的确确可以锻炼我们开始的代码能力,但是也不可以一直重头才来不是吗,所以我们就可以调库

第一步建静态库

1.我们不是需要栈吗,那我们就把Stack.c和Stack.h放到空项目里面,然后改一下项目属性

1.创建空项目,把 Stack.c 和 Stack.h 放进来

2.修改项目属性为静态库属性

调用静态库

只要有头文件和静态库文件,其他项目就可以调用了

上面我们是c++项目,但是我们调的库是c写的库,然后报了链接错误,就是c++修饰后的函数名去静态库中找结果找不到

找不到的原因是

  1. 我们只是包含了头文件,也就是只有声明,但是没有定义,没有定义也就是没有地址,然后链接call的时候要去找函数的地址,但是没地址你咋找,找到天荒地老也不会找到。找不到的原因就是我们没有链接动态库

链接动态库

如果我们把Stack.c 改成 Stack.cpp 的话他们修饰函数规则就是一样的

非常完美的跑出来了

这里我们可以看到我们c++调用c++的静态库是可以的

但是我们的目的不是调用c++的静态库不是吗,我们是要调用c的静态库

我们可以把静态库想象成目标文件,我们用c++的call去调用c写的静态库能调的动吗,应该不行吧,并不是静态库中没有这些函数的地址,而是生成函数名的修饰规则不一样,也就不能准确映射到c静态库的地址上

既然不可以准确映射,但还想调用c静态库。extern “C”应运而生

extern “C”

extern "C"把下面头文件包括起来是为了告诉编译器该 头文件展开里面的函数是c的风格编译的,不要用c++生成函数名的修饰规则去找,而是用c生成函数名的修饰规则去找


C调C++

c调用c是不出意外的,但是我们是想c调用c++

既然不可以正常映射到地址,那还要用到我们营运而生的extern “C”,但是我们不可以在c项目里面使用,因为我们c不认识extern “C”,所以我们要去c++的静态库里面去用extern “C”把该调的函数括起来,让他知道我们c项目会来调你,你好好的包装一下

因为我们c项目里面头文件展开是会把extern “C”的程序展开的,但是c还是看不懂extern “C”啊,所以我们还要来一层把extern “C”给包起来,让c看得懂

__cplusplus是在c++才会出现的标识符,c中没有这个标识符

法一

法二


总结

c++项目调用C的库 要在c++程序中加extern “C”

c项目中调用c++的库 要在c++静态库中加extern “C”,同时不要忘了需要条件编译,因为extern “C”在c项目中展开c是不认识的

c项目中调用c++的库 要在c++静态库中加extern “C”,同时不要忘了需要条件编译,因为extern “C”在c项目中展开c是不认识的


目录
相关文章
|
11月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
250 6
|
11月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
228 10
|
8月前
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
179 11
|
11月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
150 5
|
11月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
171 1
|
12月前
|
编译器 API C语言
超级好用的C++实用库之跨平台实用方法
超级好用的C++实用库之跨平台实用方法
135 6
|
12月前
|
安全 C++
超级好用的C++实用库之环形内存池
超级好用的C++实用库之环形内存池
250 5
|
12月前
|
缓存 网络协议 Linux
超级好用的C++实用库之套接字
超级好用的C++实用库之套接字
116 1
|
12月前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
490 1
|
12月前
|
存储 算法 安全
超级好用的C++实用库之国密sm4算法
超级好用的C++实用库之国密sm4算法
465 0