参考

静态链接 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下静态库的制作与使用的更多相关文章

  1. Windows下静态库与动态库的创建与使用

    Windows下静态库与动态库的创建与使用 学习内容:本博客介绍了Windows下使用Visual C++ 6.0制作与使用静态库与动态库的方法. --------CONTENTS-------- 一 ...

  2. Windows下静态库、动态库的创建和调用过程

    静态库和动态库的使用包括两个方面,1是使用已有的库(调用过程),2是编写一个库供别人使用(创建过程).这里不讲述过多的原理,只说明如何编写,以及不正确编写时会遇见的问题. //注:本文先从简单到复杂, ...

  3. linux下静态库的制作

     在我们编写软件的过程当中,少不了需要使用别人的库函数.因为大家知道,软件是一个协作的工程.作为个人来讲,你不可能一个人完成所有的工作.另外,网络上一些优秀的开源库已经被业内广泛接受,我们也没有必要把 ...

  4. Windows下动态库的制作与使用

    创建静态库

  5. Windows 下VC++6.0制作、使用动态库和静态库

    Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一 ...

  6. Windows的静态库与动态库

    Windows的静态库与动态库 1.静态库 1.1 静态库特点 运行不存在 静态库源码被链接到调用程序中 目标程序的归档 1.2 C语言静态库 C静态库的创建 创建一个静态库项目. 添加库程序,源文件 ...

  7. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  8. iOS静态库的制作与引用

    [iOS静态库的制作与引用] 1.Configuring Exported Headers To configure which headers are exported to clients, se ...

  9. iOS 静态库的制作

    按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...

随机推荐

  1. Eureka 与 zookeeper 的区别、

    前言在微服务的开发过程中,如果使用的是 Dubbo 那就必须使用到 Zookeeper ,在使用 Spring Cloud Eureka 时,自然其功能更强大得多.博主也不得不感叹,Spring Cl ...

  2. tp 执行sql 语句

    $User = D('User'); $User->query('select * from think_user where status=1'); $User->execute('up ...

  3. css 颜色混合模式 mix-blend-mode

    CSS3 新增了一个很有意思的属性 -- mix-blend-mode ,其中 mix 和 blend 的中文意译均为混合,那么这个属性的作用直译过来就是混合混合模式,当然,我们我们通常称之为混合模式 ...

  4. mysql日期加一个天数获得新的日期

    原文地址:https://476057266-qq-com.iteye.com/blog/2047671 在当前的日期上加三天,天数随便改: SELECT date_add(CURRENT_DATE( ...

  5. idea查看接口及类的关系继承(UML)图

    选中接口或类 显示结果: 如果需要添加其他的接口或类:点击右键 添加需要的接口或类: 显示结果:

  6. springboot备份mysql后发送邮件并删除备份文件,支持win和Linux

    首先加入springboot的邮箱依赖 <!--邮箱依赖--> <!-- https://mvnrepository.com/artifact/org.springframework ...

  7. mybatis执行流程

    mybatis 简介 开源的持久层框架:代码简洁,写sql,性能还可以.容易掌握 执行图 文字说明 先创建核心配置文件(sqlMapConfig.xml) 再创建映射文件(可以有多个 ~ 通常有多少张 ...

  8. miniconda3 安装tensorflow

    使用miniconda3进行安装 conda create -n tensorflow conda install tensorflow 输入下面的代码进行测试 import tensorflow a ...

  9. tp5 关键字模糊查询 日期查询 小于大于某范围等查询的优点

    挺不错,用熟了这tp5封装的很方便. 类似上边一个查询多个操作,基本在model 一个方法搞定代码也不用很多, 首先要学会用scope  网上搜tp scope 有几个例子可以借鉴 model 内添加 ...

  10. git使用mvn clean install 报错原因排查

    使用命令行git-bath.exe 来拉代码并进行编译之类的服务,结果在拉依赖时一直报错连的是144.131.254.26,看了maven的setting配置 文件 没并没有错, 最终定位问题是 gi ...