Windows下静态库的制作与使用
参考
静态链接 VS 动态链接
静态库 VS 动态库
实验环境
OS:Windows10 企业版
IDE:Visual Studio 2017旗舰版
前言
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
静态库、动态库主要考虑点
1、共享
2、知识产权保护
创建静态库

代码演示
Test_Lib.h
#pragma once
#include<iostream>
#include<string>
using namespace std;
int Add(int a, int b);
int Sub(int a, int b);
int Mul(int a, int b);
float Div(int a, int b);
int Mod(int a, int b);
int Square(int a);
Tets_lib.cpp
#include<iostream>
#include"Test_Lib.h"
#include<string>
using namespace std;
int Add(int a, int b)
{
return a + b;
}
int Sub(int a, int b)
{
return a - b;
}
int Mul(int a, int b)
{
return a * b;
}
float Div(int a, int b)
{
if ( == b)
{
string str("除数为零错误");
throw overflow_error(str);
}
return a / b;
}
int Mod(int a, int b)
{
if ( == b)
{
string str("除数为零错误");
throw overflow_error(str);
}
return a % b;
}
int Square(int a)
{
return a * a;
}
编译后生成静态库lib文件
使用静态库
创建Win32控制台空项目,测试源码
#include<iostream>
#include"Test_lib.h"
using namespace std; #pragma comment(lib,"Project3.lib")
int main()
{
int a = ;
int b = ;
cout << Add(a, b) << endl;
cout << Mul (a, b) << endl; }
输出结果

注意,第5行显示引入静态链接库。除了这种做法意外还可以在连接器中指定,见下图

一次编译到处运行
稍微修改下之前的测试静态库代码,源码如下
#include<iostream>
#include"Test_lib.h"
using namespace std; //#pragma comment(lib,"Project3.lib")
int main()
{
int a = ;
int b = ;
cout << Add(a, b) << endl;
cout << Mul (a, b) << endl;
system("pause");
}
编译完生成exe文件后,可以拷贝到任何位置,都可以直接执行。这是静态库的一大好处,也是坏处。
坏处就是稍微一点更改都要重新编译。这对于软件发布而言是很不友好的。
Windows下静态库的制作与使用的更多相关文章
- Windows下静态库与动态库的创建与使用
Windows下静态库与动态库的创建与使用 学习内容:本博客介绍了Windows下使用Visual C++ 6.0制作与使用静态库与动态库的方法. --------CONTENTS-------- 一 ...
- Windows下静态库、动态库的创建和调用过程
静态库和动态库的使用包括两个方面,1是使用已有的库(调用过程),2是编写一个库供别人使用(创建过程).这里不讲述过多的原理,只说明如何编写,以及不正确编写时会遇见的问题. //注:本文先从简单到复杂, ...
- linux下静态库的制作
在我们编写软件的过程当中,少不了需要使用别人的库函数.因为大家知道,软件是一个协作的工程.作为个人来讲,你不可能一个人完成所有的工作.另外,网络上一些优秀的开源库已经被业内广泛接受,我们也没有必要把 ...
- Windows下动态库的制作与使用
创建静态库
- Windows 下VC++6.0制作、使用动态库和静态库
Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一 ...
- Windows的静态库与动态库
Windows的静态库与动态库 1.静态库 1.1 静态库特点 运行不存在 静态库源码被链接到调用程序中 目标程序的归档 1.2 C语言静态库 C静态库的创建 创建一个静态库项目. 添加库程序,源文件 ...
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- iOS静态库的制作与引用
[iOS静态库的制作与引用] 1.Configuring Exported Headers To configure which headers are exported to clients, se ...
- iOS 静态库的制作
按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...
随机推荐
- 英雄联盟测试静态IP(固态IP)和动态IP的网速测试
在自己家里测试的,平时用迅雷下载大约600KB/S.同时,设置成动态IP的话,英雄联盟的延迟大约在100ms左右,如果设置成静态IP的话,大约是50ms左右,不过也有可能和DNS服务器的设置成静态有关 ...
- Docker 安装运行MSSQL Server
1.镜像主页 https://hub.docker.com/_/microsoft-mssql-server 2.拉取2017最新版 docker pull mcr.microsoft.com/mss ...
- Swoole练习 UDP
UDP 服务代码 <?php //创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP $serv = new swoole_server(&quo ...
- redis 那些事儿
1 我的数据存入redis了但是怎么不见了? redis的内存使用是有限的,一直向redis中写入数据(如果配置了allkeyLRU)就会触发内存淘汰机制,将最近没有访问过的的key,value删除掉 ...
- cesium 水面、淹没 效果
水面效果 参考: http://cesiumcn.org/topic/158.html http://api.rivermap.cn/cesium/rivermap/map.html https:// ...
- Reids原理之IO模型
众所周知Redis是单进程单线程的应用,在如今多核横行的时代,我们不免有疑问,单线程的redis怎么就成了高性能的代表 当有多个线程同时调用redis的时候,那么单线程的redis是怎么处理的呢,这里 ...
- 使用TypeScript创建React Native
⒈初始化 React Native环境 参考https://reactnative.cn/docs/getting-started.html ⒉安装React Native官方的脚手架工具 npm i ...
- ORA-01618 ORA-19809: limit exceeded for recovery files
由于DB_RECOVERY_FILE_DEST_SIZE 参数设置太小,导致redo只能创建一组,无法创建节点二的日志组,节点二数据库无法启动,如下图: 修改参数后,节点二无法启动到mount模式,无 ...
- 机器学习之主成分分析PCA原理笔记
1. 相关背景 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律.多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的 ...
- go语言实现链式栈
haa哈哈== import "errors" var ( // ErrEmpty 栈为空 ErrEmpty = errors.New("stack is empty&q ...