C/C++:Windows中的静态链接库

静态链接库

静态链接库是在编译时将库的代码和数据复制到可执行文件中;这意味着最终的可执行文件包含了程序所需的所有函数和数据,因此它在运行时是完全独立的。

静态链接库工作原理:
开发人员创建一个或多个静态链接库,其中包含他们想要重用的代码。
在编译目标程序时,链接器将目标程序与静态链接库链接在一起。
静态链接器会将库中使用到的函数和数据复制到目标程序中,创建一个单独的可执行文件。
静态链接库优点:
可执行文件不依赖于外部的库文件,因此更容易移植和分发;无需在运行时加载库,因此可能具有更快的启动时间和更低的内存占用。
静态链接库缺点:
每个可执行文件都包含库的副本,因此可能会增加可执行文件的大小;如果库的代码需要更新,必须重新编译目标程序。
Windows平台中的静态链接库格式

在 Windows 平台中,常见的静态连接库格式是 .lib 文件;.lib 文件是一种用于存储静态链接库的格式,其中包含了编译后的二进制代码以及相应的符号信息。这些 .lib 文件通常是由编译器生成的,它们包含了函数、变量以及其他符号的定义和实现。在编写代码时引用这些静态连接库时,编译器会将所需的函数和数据从库中提取出来,并将它们直接嵌入到最终的可执行文件中。

.lib文件的生成和使用
.lib文件生成:

Visual Studio中对项目属性进行设置;配置类型设置为静态库(.lib),目标文件扩展名会自动更换,目标文件名根据自己的需求改。

接着编写库文件代码,头文件中包含声明,源文件中编写实现代码:

示例:相加函数

①tools.h

#include<stdio.h>
int add(int nNumberA, int nNumberB);

②tools.c

int add(int nNumberA, int nNumberB)
{return nNumberA+nNumberB;
}

编写完成后生成文件

在项目文件中找到刚刚生成的.lib文件

生成路径会在输出中显示:

.lib文件使用

此时我们要在新项目中使用上面生成的.lib文件;首先打开项目文件夹,并将生成的.lib文件和相关头文件放入项目文件夹中。

接着将tools.h头文件添加进项目(方便后续函数调用);添加完成后就可以在程序中调用库文件中的相关代码。

#include<stdio.h>
#include "tools.h"
#pragma comment(lib,"tool.lib")
​
void main() {printf("%d", add(5,5));
}

#pragma comment(lib,"tool.lib"):打开lib文件

最后库函数成功调用,程序输出为:

注:笔者所使用的IDE为Visual Studio2017,有需要的朋友可以私聊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/696127.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3.0(八) 监听器(watch),高级监听器(watchEffect)

文章目录 watch1 watch的用法2 watch的高级用法3 watch性能优化 watchEffect1 停止监听2 侦听多个状态3 懒执行 watch和watchEffect的区别watch和computed的区别 watch watch特性进行了一些改变和优化。与computed不同&#xff0c;watch通常用于监听数据的变化&#xff0c;并执…

【数据结构】详解栈且实现

一.栈 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;…

《Mybatis》系列文章目录

什么是 MyBatis&#xff1f; MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff…

动手学深度学习18 预测房价竞赛总结

动手学深度学习18 预测房价竞赛总结 李沐老师代码AutoGluonh2o集成学习automlQA 视频&#xff1a; https://www.bilibili.com/video/BV15Q4y1o7vc/?vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 代码&#xff1a; https://www.bilibili.com/video/BV1rh411m7Hb/?vd_sourceeb04…

【强训笔记】day21

NO.1 思路&#xff1a;第一个位置放最小的&#xff0c;其次放最大的&#xff0c;依次类推。 代码实现&#xff1a; #include<iostream>using namespace std; int n;int main() {cin>>n;int left1,rightn;while(left<right){cout<<left<<" &…

华中科大:感谢大家,我的春招之旅结束了

今天在论坛上看到一个帖子&#xff0c;一位华中科大的同学&#xff0c;因为家中父亲突然病倒&#xff0c;发求助帖&#xff1a; 请问大家&#xff0c;春招走哪个方向能最快找到工作&#xff1f;还是说继续读研呢&#xff0c;但是家里急需钱…… 当时这个帖子直接热榜第一&…

数据可视化训练第6天(美国人口调查获得关于收入与教育背景的数据,并且可视化)

数据来源 https://archive.ics.uci.edu/dataset/2/adult 过程 首先&#xff1b;关于教育背景的部分翻译有问题。 本次使用字典嵌套记录数据&#xff0c;并且通过lambda在sorted内部进行对某个字典的排序&#xff0c;最后用plotly进行绘图 本次提取数据的时候&#xff0c;用到…

黑盒测试中的边界值分析

黑盒测试是一种基于需求和规格的测试方法&#xff0c;它主要关注软件系统输出的正确性和完整性&#xff0c;而不考虑内部代码的实现方式。在黑盒测试中&#xff0c;边界值分析是一种重要的测试技术&#xff0c;它可以帮助测试人员有效地发现输入和输出的问题。本文将从什么是边…

栈与递归的实现

1. 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则&#x…

【JavaScript超详细的学习笔记-上】JavaScrip超详细的学习笔记,共27部分,12多万字

想要获取笔记的可以点击下面链接获取 JavaScript超详细的学习笔记&#xff0c;点击我获取 一&#xff0c;JavaScript详细笔记 1&#xff0c;基础知识 1-1 基础知识 // 1&#xff0c;标识符命名规则&#xff1a;第一个字母必须是字母&#xff0c;下划线或一个美元符号。不能…

若依生成树表和下拉框选择树表结构(在其他页面使用该下拉框输入)

1.数据库表设计 生成树结构的主要列是id列和parent_id列&#xff0c;后者指向他的父级 2.来到前端代码生成器页面 导入你刚刚写出该格式的数据库表 3.点击编辑&#xff0c;来到字段 祖籍列表是为了好找到直接父类&#xff0c;不属于代码生成器方法&#xff0c;需要后台编…

实训一:设计系统主页作业

1.题目 设计系统主页。 2.目的 (1)熟悉Web前端项目开发环境。 (2)掌握如何建立Web前端项目&#xff0c;学会规划项目结构。 (3)掌握动态生成页面内容的方法。 (4)理解如何使用Flash显示图片新闻。 (5)会在应用系统中编写播放动态新闻的程序。 3.内容 建立项目结构&#xff0c;并…