zoukankan      html  css  js  c++  java
  • Windows下静态库的制作与使用

    参考

    静态链接 VS 动态链接

    静态库 VS 动态库

    实验环境

    OS:Windows10 企业版

    IDE:Visual Studio 2017旗舰版

    前言

    静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

    静态库、动态库主要考虑点

    1、共享

    2、知识产权保护

    创建静态库

    代码演示

    Test_Lib.h

     1 #pragma once
     2 #include<iostream>
     3 #include<string>
     4 using namespace std;
     5 int Add(int a, int b);
     6 int Sub(int a, int b);
     7 int Mul(int a, int b);
     8 float Div(int a, int b);
     9 int Mod(int a, int b);
    10 int Square(int a);
    View Code

    Tets_lib.cpp

     1 #include<iostream>
     2 #include"Test_Lib.h"
     3 #include<string>
     4 using namespace std;
     5 int Add(int a, int b)
     6 {
     7     return a + b;
     8 }
     9 int Sub(int a, int b)
    10 {
    11     return a - b;
    12 }
    13 int Mul(int a, int b)
    14 {
    15     return a * b;
    16 }
    17 float Div(int a, int b)
    18 {
    19     if (0 == b)
    20     {
    21         string str("除数为零错误");
    22         throw overflow_error(str);
    23     }
    24     return a / b;
    25 }
    26 int Mod(int a, int b)
    27 {
    28     if (0 == b)
    29     {
    30         string str("除数为零错误");
    31         throw overflow_error(str);
    32     }
    33     return a % b;
    34 }
    35 int Square(int a)
    36 {
    37     return a * a;
    38 }
    View Code

    编译后生成静态库lib文件

    使用静态库

    创建Win32控制台空项目,测试源码

     1 #include<iostream>
     2 #include"Test_lib.h"
     3 using namespace std;
     4 
     5 #pragma comment(lib,"Project3.lib")
     6 int main()
     7 {
     8     int a = 10;
     9     int b = 3;
    10     cout << Add(a, b) << endl;
    11     cout << Mul (a, b) << endl;
    12 
    13 }
    View Code

    输出结果

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

    一次编译到处运行

    稍微修改下之前的测试静态库代码,源码如下

     1 #include<iostream>
     2 #include"Test_lib.h"
     3 using namespace std;
     4 
     5 //#pragma comment(lib,"Project3.lib")
     6 int main()
     7 {
     8     int a = 10;
     9     int b = 3;
    10     cout << Add(a, b) << endl;
    11     cout << Mul (a, b) << endl;
    12     system("pause");
    13 }
    View Code

    编译完生成exe文件后,可以拷贝到任何位置,都可以直接执行。这是静态库的一大好处,也是坏处。

    坏处就是稍微一点更改都要重新编译。这对于软件发布而言是很不友好的。

  • 相关阅读:
    JAVA Aes加密解密
    15个实用的jQuery代码片
    mybatis-generator-config工具的使用
    Oracle中Merge into用法总结
    Highcharts 在低版本 IE 上使用注意事项及个人总结
    梦想是什么
    博客美化基本后台设置与样式设置
    IntelliJ Idea 常用快捷键列表
    磁盘
    [半转]1px边框 移动端
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9694131.html
Copyright © 2011-2022 走看看