VS中静态库的创建、链接 和 extern的用法

目录

静态库

​编辑

链接静态库

C的编译器去编译c++写的函数代码 本质是因为c++和c的编译器在对函数重命名的命名方式不同。函数名不同,在链接过程中会找不到对应函数的定义,所以会导致报。

而extern的作用就是将c++编译器以c的风格 命名函数

 我们先看看C编译器在编译函数对函数重命名的风格

这是C++编译器在编译函数对函数重命名的风格

用 extern 在 C++调用C的工程

 我们需要进行一些设置才能真正链接到静态库

用 extern 在C调用C++的工程


        在日常编程过程或者公司工作合作时,我们难免会需要用到他人或者曾经写的代码,但是之前的代码是使用.c格式写的,现在又用的.cpp格式,或者反过来。而ctrl+c,ctrl+v有时又不太合适,这时c++提供了extern"C"来让cpp中的函数以c的形式编译,以下我们看具体用法。

静态库

 静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,链接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。

创建静态库的过程如下图(这里我使用的是VS2022)VS中静态库的创建、链接 和 extern的用法_第1张图片

VS中静态库的创建、链接 和 extern的用法_第2张图片

这里我们可以看到创建的新静态库工程自带有两个头文件和.cpp文件

VS中静态库的创建、链接 和 extern的用法_第3张图片

我们选择将它们删除

VS中静态库的创建、链接 和 extern的用法_第4张图片

然后,将我们所需要的生成的静态库的.c/.cpp和.h头文件加入进来

 VS中静态库的创建、链接 和 extern的用法_第5张图片

VS中静态库的创建、链接 和 extern的用法_第6张图片

加入了所需要的生成的静态库的.c/.cpp和.h头文件,进行生成.lib的静态库

VS中静态库的创建、链接 和 extern的用法_第7张图片

这时,解决方案报了一个错   

 C1010    在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "pch.h"”?  

这是因为VS静态库工程中会自动包含"pch.h",而我们需要手动关闭自动包含。

按照下图进行操作

 VS中静态库的创建、链接 和 extern的用法_第8张图片

将预编译头设置为   不使用预编译头->应用->确认

VS中静态库的创建、链接 和 extern的用法_第9张图片 这时我们再进行生成.ilb静态库就成功了,并且我们可以在你的工程名目录下的Debug文件夹中找到该lib文件

 记住该目录,下面操作还需要用到此目录

VS中静态库的创建、链接 和 extern的用法_第10张图片

链接静态库

由于extern的用法与静态库息息相关,所以我们这里直接举一个.cpp需要调用.c文件中的函数的extern的例子,如果你本来就是.cpp 链接 .cpp的静态库  或者 .c  链接.c的静态库,直接看设置操作,忽略extern的使用即可。

C的编译器去编译c++写的函数代码 本质是因为c++和c的编译器在对函数重命名的命名方式不同。函数名不同,在链接过程中会找不到对应函数的定义,所以会导致报。

而extern的作用就是将c++编译器以c的风格 命名函数

 我们先看看C编译器在编译函数对函数重命名的风格

VS中静态库的创建、链接 和 extern的用法_第11张图片

这是C++编译器在编译函数对函数重命名的风格

VS中静态库的创建、链接 和 extern的用法_第12张图片

 --------------------------------------------------------------------------------------------------------------------------------

用 extern 在 C++调用C的工程

首先我们先包含静态库的头文件

这里我教大家两种“奇特”的包头文件方式

第一种  是静态库的头文件相对 你现在所写的工程目录比较近  的用法

第二种  就是写绝对路径

VS中静态库的创建、链接 和 extern的用法_第13张图片

然后,我们先随便调用一下 头文件中的函数并且编译

 VS中静态库的创建、链接 和 extern的用法_第14张图片

出现报错

 我们需要进行一些设置才能真正链接到静态库

 VS中静态库的创建、链接 和 extern的用法_第15张图片

 VS中静态库的创建、链接 和 extern的用法_第16张图片

VS中静态库的创建、链接 和 extern的用法_第17张图片

 找到并选择之前存放.lib的Debug文件夹

VS中静态库的创建、链接 和 extern的用法_第18张图片

应用并确认

还要设置链接器 的 输入

先去Debug文件夹复制.lib文件的全名(包括扩展名)

VS中静态库的创建、链接 和 extern的用法_第19张图片

将.lib的全名粘贴入 附加依赖项  记住加 ;

应用->确定

VS中静态库的创建、链接 和 extern的用法_第20张图片

 再进行运行编译,运行成功!

VS中静态库的创建、链接 和 extern的用法_第21张图片

用 extern 在C调用C++的工程

创建静态库和链接静态库的过程和上面一样

但是 C 调用 C++ 的工程需要注意几点

1. C没有 extern的关键字,所以我们只能在C++工程的头文件使用 extern

 2.需要注意C++工程的头文件在C文件中展开时,要屏蔽 extern ,因为C没有 extern的关键字

我们可以使用预处理指令来进行屏蔽

VS中静态库的创建、链接 和 extern的用法_第22张图片

预处理指令来控制是否使用extern "C"  ,而__cplusplus是只有cpp文件才会有的define定义

 这样一来就不存在问题了

链接跟上面是一样的设置过程

你可能感兴趣的:(C++初阶知识,c++,c语言)