1.静态链接库的生成和使用

article/2025/9/29 7:44:19

1.什么时静态链接库

静态库(Static Library)通常包含一堆程序员自定义的变量与函数,在编译期间由编译器和链接器将它集成到可执行文件中,也就是生成的.exe文件中

2.静态库的扩展名

在Windows下,静态库的扩展名是.lib,在Linux下是.a

3.静态库的优缺点

1)优点:

发布时只需发布.exe文件,因为库已经集成到可执行文件中,运行时不再依赖库

2)缺点:

静态库集成到.exe文件中,导致.exe文件较大,同时,如果后续想要升级库必须重新编译.exe文件

4.创建静态库的步骤

1)创建静态库项目

2)添加.h和.cpp文件

在StaticLib.h中:

#pragma onceint SquareSum(int a, int b);int SumSquare(int a, int b);

在StaticLib.cpp:

#include "stdafx.h"
#include "StaticLib.h"int SquareSum(int a, int b)
{return (a * a + b * b);
}int SumSquare(int a, int b)
{return ((a + b) * (a + b));
}

注意添加头文件:stdafx.h

3)生成.lib文件

点击生成解决方案(不可点击运行),便得到了StaticLib.lib文件:

 

5.使用静态库

1)正常一样创建一个控制台应用程序

2)在文件中添加头文件:StaticLib.h(注意这个头文件的位置,建议拷贝到当前项目目录下)

如果在这里直接运行,便会得到错误:

3)在项目中添加lib文件,两种方法(选其一):

a)在文件中添加语句:

#pragma comment(lib,"../Debug/StaticLib.lib")

(注意lib文件的位置,这里可以添加相对路径,也可以添加绝对路径,建议也把lib文件放在当前项目下吧)

(把跟项目相关的文件放在项目下是一个好习惯,可以避免人家对你项目依赖项的寻找)

b)项目右键-》属性-》连接器-》附加库目录,在里面加入静态库所在的路径

 继续点击输入-》附加依赖项,在里面加入StaticLib.lib

这样编译也会成功

实例,main.cpp中:

#include <iostream>
using namespace std;
#include "StaticLib.h"//#pragma comment(lib,"../Debug/StaticLib.lib")int main()
{int a = 34;int b = 12;cout << SumSquare(a, b) << endl;cout << SquareSum(a, b) << endl;system("pause");return 0;
}

执行:

如果我们删除StaticLib.lib文件,双击.exe文件我们也能得到这样的结果(如果输出框一闪而过,就在命令提示符中运行.exe文件)

 

6.注意

1)如果上面两种方法都在同一个项目中采用了,也是不会出错的

2)用在32位生成的lib文件在64位的应用程序使用时,出现:

3)如果用64位生成的lib文件在32位的应用程序中使用时,出现:

所以,应该使用与应用程序位数相同的lib文件,不可交叉使用

 


http://chatgpt.dhexx.cn/article/1dMBYAy0.shtml

相关文章

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

文章目录 前言一、什么是静态链接库&#xff1f;二、静态链接库的建立与使用1、静态链接库的建立创建一个静态链接库项目创建一个头文件编写自己的静态库生成静态库 2、静态链接库的使用创建一个新项目写入自己定义的那个头文件重新打开vs时 总结 前言 在我们平时写代码的时候…

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

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

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

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

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

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

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

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

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

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

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

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

动态链接库和静态链接库

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

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

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

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

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

静态链接库(.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个字节…