静态链接库,动态链接库【滴水逆向三期48笔记】(上)

简介: 静态链接库,动态链接库【滴水逆向三期48笔记】

在开发过程中,我们通常会有很多函数,需要多次使用或在不同的程序中使用该函数,也有可能我们会将我们写好的函数给别人使用,但是我们又不想给他源代码,毕竟代码是我们花了很多功夫写出来的,那么我们如何不发给其他人源代码而让别人使用咱们写好的函数呢?在这里我们就要用到静态链接库和动态链接库的知识了。


一.什么是库

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能在开发时每个源代码都从零开始,那样太花费时间了,因此库的存在很大程度上提高了我们的开发效率。

二.静态链接库的使用方法

1.创建***.lib文件

我们可以在visual studio中创建静态库,如图所示:

在创建了静态库之后可以将原有的***.cpp和***.h全部删除,使用我们新建的.h文件和.cpp文件:

完成之后可以添加代码,这里使用的所有代码都是滴水逆向三期视频里海东老师的代码:

.h(头文件)中添加代码,先进行函数声明:

#pragma once
int Plus(int x, int y);
int Sub(int x, int y);
int Mul(int x, int y);
int Div(int x, int y);

.cpp文件中添加代码:

#include "MyLib.h"
int Plus(int x, int y)
{
  return x + y;
}
int Sub(int x, int y)
{
  return x - y;
}
int Mul(int x, int y)
{
  return x * y;
}
int Div(int x, int y)
{
  return x / y;
}

在.cpp文件中incldue的是前面头文件的文件名。

点击平时的编译运行按钮,虽然提示无法运行(lib本来就无法单独运行),但已经成功生成.lib 文件了,去到 Debug 或 Release 目录下即可看到,lib 文件名和项目名一致,这里项目叫StaticLib1,生成的文件名则为StaticLib1.lib,和函数名 cpp名都无关。

2.静态链接库的实现

在完成了lib文件的创建后,我们可以将上面创建好的***.lib文件和***.h文件拷贝到需要使用的项目目录下,然后在源文件中添加代码:

#pragma comment(lib, "StaticLib1.lib")//这里需要改为自己创建的lib文件名
• 1
#include<stdio.h>
#include"MyLib.h"        //需将.h文件放入目录下才可include,
//int Plus(int x, int y);  //若没有上行的include,可自行声明.h中的函数,声明与.h中的一致即可,则可不将.h拷贝进目录下
#pragma comment(lib, "StaticLib1.lib") //在项目的"资源文件"中添加相应lib文件则不用这一条
int main()
{
  printf("%d\n", Plus(2, 1));
  return 0;
}

接下来我们来讨论静态链接库的优缺点:

优点:静态链接库可以实现代码的共享,让别人可以使用或自己可以在不同程序中多次使用。

缺点:

1.我们可以通过visual C++6.0的反汇编窗口观察到:我们在调用函数时,函数的地址在.exe文件中,也就是说,我们之前写好的函数的二进制直接被编译进了程序中,可能我们编译好的函数中有很多函数在这个程序中用不上,但是编译器把它编译进了程序中,造成磁盘空间浪费。使用静态链接生成的可执行文件体积较大,造成浪费我们常用的printf、memcpy、strcpy等就来自这种静态库。

2.既然函数直接被编译进了程序中,那么当我们发现了函数的不足之处时,如果我们需要更新源代码,那么程序就需要重新编译,会给我们带来很多麻烦。

相关文章
|
10月前
|
编译器 C语言
【C语言航路外传】一招解决visual studio部分函数不安全问题
【C语言航路外传】一招解决visual studio部分函数不安全问题
75 0
|
1月前
|
Linux Shell 数据库
【绝技大公开】Linux文件查找新招式:打破常规,探索那些鲜为人知的技巧,让你成为真正的文件追踪大师!
【8月更文挑战第13天】文件查找是Linux用户必备技能,能大幅提升工作效率。本文介绍几种高效查找方法,包括使用`column`美化`find`输出、利用`locate`和`mlocate`快速搜索、编写脚本自动化任务、采用`fd`现代工具提升查找体验,以及结合`grep`和`rg`搜索文件内容。此外,还推荐了`Gnome Search Tool`和`Albert`等图形界面工具,为用户提供多样选择。掌握这些技巧,让你的工作更加得心应手。
37 2
|
4月前
|
开发框架 Java .NET
救命!C程序运行原理的秘密居然被我发现了
救命!C程序运行原理的秘密居然被我发现了
24 0
|
10月前
|
存储 编译器 数据库
【C语言航路】第十四站:文件(上)
【C语言航路】第十四站:文件
55 0
|
10月前
|
存储 编译器 C语言
【C语言航路】第十四站:文件(下)
【C语言航路】第十四站:文件
56 0
|
编译器 C语言 C++
静态链接库,动态链接库【滴水逆向三期48笔记】(下)
静态链接库,动态链接库【滴水逆向三期48笔记】(下)
|
存储 文件存储 C语言
C语言文件读写函数介绍【滴水逆向三期(39)笔记】
C语言文件读写函数介绍【滴水逆向三期(39)笔记】
Win系统 - 一键秒关所有程序,霸气侧漏!
Win系统 - 一键秒关所有程序,霸气侧漏!
293 0
Win系统 - 一键秒关所有程序,霸气侧漏!
程序人生 - 箴言
程序人生 - 箴言
80 0
|
开发工具 Android开发 iOS开发