基于vs2019的静态链接库的创建与使用(超详细)

article/2025/9/29 7:48:40

文章目录

  • 前言
  • 一、什么是静态链接库?
  • 二、静态链接库的建立与使用
    • 1、静态链接库的建立
      • 创建一个静态链接库项目
      • 创建一个头文件
      • 编写自己的静态库
      • 生成静态库
    • 2、静态链接库的使用
      • 创建一个新项目
      • 写入自己定义的那个头文件
      • 重新打开vs时
  • 总结

前言

在我们平时写代码的时候,代码中会含许多头文件,然后我们就可以来定义一些变量,使用一些函数。那我们也会想,有没有可能把自己写的一些函数打包成这样,然后下次再碰到相似的题目就可以直接写上自己定义的头文件,直接调用自己定义的函数来解决问题,而不用再次重新写该函数。关于这件事还真可以实现,这就要提到今天的主题——链接库。

一、什么是静态链接库?


静态链接库(Static Library)包含一些由我们自己定义的变量与函数,在编译期间由编译器和链接器将它集成到可执行文件(.exe)中,在Window下的后缀名是.lib(听说在Linux下是.a)在这里插入图片描述就是图中第四个,有些电脑似乎没有后缀,你也可以看图标(三杠)。静态链接库最终都会包装到.exe文件中,这样可以方便程序的移植,但也有很大的缺点,比如.exe文件过大、不易于程序更新等等,所以现在的软件大多都是用的动态链接库(.dll)。

二、静态链接库的建立与使用

1、静态链接库的建立

创建一个静态链接库项目

新建项目往下滑找到静态库
在这里插入图片描述
选择一个自己熟悉的文件夹

创建一个头文件

右键头文件添加一个新建项
在这里插入图片描述
选择头文件,建一个MS.h,点击添加
在这里插入图片描述

编写自己的静态库

这里以两个函数sub()减法,add()加法为例子
在这里插入图片描述
将鼠标点击一下add这里,然后按alt+回车,出现这几个选项,点击创建add的定义
在这里插入图片描述
在这里声明这个函数,对sub操作相同
在这里插入图片描述

生成静态库

右键自己静态库项目,点击生成
在这里插入图片描述
这样表示生成成功
在这里插入图片描述
这样我们就建立了自己的静态连接库,是不是十分简单,好了,建立好了,接下来我们就该使用它了

2、静态链接库的使用

创建一个新项目

右键解决方案->添加->新项目
在这里插入图片描述
创建一个空项目
在这里插入图片描述
添加一个源文件
在这里插入图片描述
在这里插入图片描述

写入自己定义的那个头文件

在这里插入图片描述
此时我们可以将其设为启动项来试一下
在这里插入图片描述
此时它会报几个错误,因为在它编译器中没有我们的头文件,并且add我们并未在函数中定义,所以我们要先将MS弄到编译器中去
在这里插入图片描述
右键引用,点击添加,将MS勾选,点击确定
在这里插入图片描述
右键我们的项目,点击属性
在这里插入图片描述
在c/c++常规中找到附加包含目录(这里就可以添加我们的头文件了)
在这里插入图片描述
在这里点击编辑
在这里插入图片描述
点击第一个(左上角有个加号的文件夹),然后点击这三个点
在这里插入图片描述
这时候就要回到开始了,找到我们创建静态库的文件夹,然后选择这个文件(MS)
在这里插入图片描述
最后点击应用就可以
在这里插入图片描述
然后我们就可以成功运行代码了
在这里插入图片描述

重新打开vs时

有一天,你打开vs准备做会题,你突然发现,你这个题目以前做过,而且刚好被你做成了静态库,哦豁,这不就刚好可以copy一下,好的,你准备使用了
首先,你碰到了这个问题,欧克,没事,我到csdn学了怎么搞,先添加一个引用
在这里插入图片描述
然后你发现,tnnd csdn骗我,我的MS呢???
在这里插入图片描述
然后你还是先把后面步骤做完了,抱着侥幸心理运行一下
对不起,还是报错,显示无法解析add函数
在这里插入图片描述
这个问题当时困扰我半天,我后面发现,你要引用的话,这个静态库就必须在解决方案里,你只要右键解决方案,添加一个现有项目
在这里插入图片描述
找到这个打开就可以了
在这里插入图片描述
这时候你发现引用里面又有了,然后勾选,就可以正常运行了。
你想,那不是每次都要去把这个打开吗,不会很麻烦吗?其实你也可以这样,打开你静态库的文件夹,找到这个MS.h这个文件,就时这个右下角有红标的
在这里插入图片描述
同时要找到前面提到的.lib文件,就在上图的debug里面
在这里插入图片描述
把这个两个文件复制到你这个项目的文件夹里,保证它们和这个源文件(.cpp)在同一个文件夹里就好
在这里插入图片描述

然后再你的代码中加入这样一段

#pragma comment(lib,“静态库名字.lib”)

这样你就可以不引用也可以正常使用了
在这里插入图片描述

总结

以上就是我关于vs2019建立静态库的见解,但由于我学疏才浅,对很多都不了解,其中看了很多大佬写的文章,但仍有很多不了解的地方,如果文章中有错误,希望各位大佬不吝赐教。尤其是最后那里,如果大佬们有更好的方法,希望可以教教我。


http://chatgpt.dhexx.cn/article/ePiNUoFG.shtml

相关文章

C++的静态链接库和动态链接库

在电脑上安装某个软件的时候,我们都能看到安装目录下有很多lib和dll文件,并且我相信,你在用某个软件工具的时候遇到过以下这个界面: 这个界面提示你如案件在运行过程中少了某一个文件,导致软件无法再进行运行下去。 再…

静态链接库(Lib)和动态链接库(DLL)

序言:本文主要讲解静态链接库和动态链接库的区别,以及怎么样编译和引用两种库,怎么样从DLL中导出函数和导出C类。 一、静态链接库和动态链接库 1.静态链接库(.LIB):函数和数据被编译进一个二进制文件。发布时,只需要发…

C++静态链接库与动态链接库

C静态链接库与动态链接库 什么是库程序编译成可执行程序的步骤静态链接库与动态链接库的区别(简易版):静态链接库调用实现动态链接库调用实现g(gcc)编译选项 什么是库 库是写好的、现有的、可复用的代码。库是一种可执…

「C/C++」C/C++静态链接库与动态链接库

博客主页:何曾参静谧的博客 文章专栏:「C/C」C/C学习 目录 相关术语案例环境:Win10VS2019一、链接库介绍二、静态链接库(Static Library)2.1、静态库优缺点2.2、静态库的创建2.2.1、创建静态库项目2.2.2、添加.h头文件…

C++封装静态链接库及使用

一、为什么要把程序封装成库 有时我们需要把自己的程序交给第三方调用,但是又不想被别人看到自己的具体实现代码,就封装成库给别人使用。库有动态链接库和静态链接库,区别是动态链接库可以在程序运行时动态链接,而静态链接库相当于…

C++ 创建静态链接库和动态链接库

上篇文章演示了如何使用C 编译的静态链接库和动态链接库,本篇文章主要介绍如何创建静态链接库和动态链接库,本文使用的工具是visual studio 2019 企业版,需要安装对应的Csdk,可以参考网上其他文章,本问不在赘述。 一、…

动态链接库和静态链接库

转载自:https://www.cnblogs.com/king-lps/p/7757919.html (有删减) 1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始&…

静态链接库与动态链接库----C/C++

平时我们写程序都必须include很多头文件,因为可以避免重复造轮子,软件大厦可不是单靠一个人就能完成的。但是你是否知道引用的那些头文件中的函数是怎么被执行的呢?这就要牵扯到链接库了!!! 库有两种&#…

【四、静态库与动态库(共享库)】揭开链接库的神秘面纱:手把手教你制作静态链接库与动态链接库

前言 不管是在 Windows 下开发,还是在 Linux 下开发,我们都会经常性的使用一些库文件,这些库文件的特点就是,我们可以看到接口的原型并通过这些接口来调用这个函数的功能,但是我们无法查看这个功能的实现。这就是库文…

静态链接库(.lib)和动态链接库(.dll)的使用

静态链接库(.lib)和动态链接库(.dll)的使用 文章目录 静态链接库(.lib)和动态链接库(.dll)的使用一、静态链接库1. 静态链接库概述2. 创建静态链接库3. 调用静态链接库 二、动态链接库(dynamic linking library)1. 动态链接库概述2. 创建动态链接库并导出函数导出函数两种方式1…

静态链接库

库 库的存在&#xff0c;大大方便了我们进行编程。因为有了库&#xff0c;我们不必再从0开始&#xff0c;例如我们大多数人C语言写的第一个程序Hello World!都是用了库函数。以printf为例&#xff0c;我们只需要在程序源代码中包含<stdio.h>这个头文件之后&#xff0c;就…

史上最全Java类型转换

讲类型转换之前&#xff0c;让我来贴张表 基本数据类型的表示范围 类型 长度 表示范围默认值byte8b-128&#xff5e;1270short16b-32768&#xff5e;327670int32b-21147483648&#xff5e;21474836470long64b-9223372036 854 775 808&#xff5e;9223372036 8547758070Lfloat3…

Java:类型转换

public class Demo04 {public static void main(String[] args) {//低--------------------------> 高// byte,short,char->int->long->float->doubleint i 128;byte b (byte) i ;//内存溢出//强制转换 &#xff08;类型&#xff09;变量名 高--低//自动转换…

java强转规则_java类型转换及其规则介绍

一、自动类型转换 整型、实型(常量)、字符型数据可以混合运算。运算中&#xff0c;不同类型的数据先转化为同一类型&#xff0c;然后进行运算。 数据类型转换必须满足如下规则&#xff1a; 1、不能对boolean类型进行类型转换。 2、不能把对象类型转换成不相关类的对象。 3、在把…

Sql-Java类型转换

Mysql-Java字段类型转换 mysql类型名大小用途对应Java类char0-255 bytes定长字符串 &#xff08;姓名、性别、学号&#xff09;Stringvarchar0-65535 bytes变长字符串&#xff08;比上面更长一点的那种&#xff09;Stringtinytext0-255 bytes比较短的那种文本数据&#xff08;…

JAVA类型转换及变量详解

类型转换 由于java是强类型语言&#xff0c;所以要进行有些运算的时候&#xff0c;需要用到类型转换。 byte&#xff08;1个字节&#xff09;,short&#xff08;2个字节&#xff09;,char&#xff08;2个字节&#xff09;----->int&#xff08;4个字节&#xff09;---->…

Java类型转换(自动类型转换+强制类型转换)

一、 自动类型转换(隐式类型转换) 整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。自动转换从低级到高级。 自动转换有以下规律: 1、小的类型自动转化为大的类型 2、整数类型可以自动转化为浮点类型,可能会产生舍入误…

Java的类型转换

需要类型转换的原因:因为Java是强类型的语言&#xff0c;所以有时可能要进行跨类型的运算&#xff0c;这就需要先进行类型转换&#xff0c;再进行运算。 类型转换分为&#xff1a; 强制类型转换(由高-->低时使用)&#xff0c;自动类型转换/ 隐式类型转换(由低-->高时使用…

java中的类型转换

java的基本数据类型 1.数值型&#xff1a;byte&#xff0c;short&#xff0c;int&#xff0c;long&#xff0c;float&#xff0c;double 2.字符型&#xff1a;char 3.布尔型&#xff1a;boolean 数据类型占据字节数byte1个字节short2个字节int4个字节long8个字节float4个字节…

Java中各种类型的转化

目录 一.Integer和int之间的类型转化 1.自动装箱 2.构造器方法 3.Integer.valueOf(int i) 二.Integer和String之间的类型转换 1.String转换为Integer 1.Integer.parseInt(String s) ​编辑 2.Integer.valueOf(String s) 2.Integer转换为String 1.Integer.toString() …