windows静态库的使用

最近在学Zeromq(像框架一样的一个socket library)的使用,里面有关于库的使用问题。今天就来复习下静态库的使用:

使用静态库是重用代码的一种绝佳方式。您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。

 

Missoft msdn library参考:http://msdn.microsoft.com/zh-cn/library/ms235627(v=vs.90).aspx

参考文章:http://hi.baidu.com/schsun/item/fafcd31b528716c539cb308d

(一).静态库的创建步骤:

  1.选择“Win32 控制台应用程序”.

  2.选择“应用程序类型”下的“静态库".

  3.清除“附加选项”下的“预编译头”复选框。

 
  4.添加一个头文件:MathFuncsLib.h
// MathFuncsLib.h
#ifndef _MATCH_H
#define _MATCH_H

namespace MathFuncs
{
	class MyMathFuncs
	{
	public:
		// Returns a + b
		static double Add(double a, double b);

		// Returns a - b
		static double Subtract(double a, double b);

		// Returns a * b
		static double Multiply(double a, double b);

		// Returns a / b
		// Throws DivideByZeroException if b is 0
		static double Divide(double a, double b);
	};
}

#endif

  5.添加一个源文件:MathFuncsLib.cpp

// MathFuncsLib.cpp

#include "MyExecRefsLib.h"
#include "MathFuncsLib.h"
#include <stdexcept>

using namespace std;

namespace MathFuncs
{
    double MyMathFuncs::Add(double a, double b)
    {
        return a + b;
    }

    double MyMathFuncs::Subtract(double a, double b)
    {
        return a - b;
    }

    double MyMathFuncs::Multiply(double a, double b)
    {
        return a * b;
    }

    double MyMathFuncs::Divide(double a, double b)
    {
        if (b == 0)
        {
            throw new invalid_argument("b cannot be zero!");
        }

        return a / b;
    }
}

  6.编译这个工程就,在工程所在文件夹的Debug文件夹中生成.lib文件,这个文件就是一个静态库。

  使用静态库我们需要这个 “*.lib"文件和刚刚的".h"文件。

(二).静态库的使用。
  1.还是创建“Win32 控制台应用程序”(其他也可以,举个例子而已)。
  2.把".lib"文件和".h"文件复制到新项目的目录。
  3.把“.h"文件添加进去。右击头文件/添加/现有项:
 
  4.添加一个源文件:
 1 #include <iostream>
 2 
 3 #include "MyExecRefsLib.h"
 4 #pragma comment( lib, "..\staticLib\MyExecRefsLib.lib" )     //加载静态库
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     double a = 7.4;
10     int b = 99;
11 
12     cout << "a + b = " <<
13         MathFuncs::MyMathFuncs::Add(a, b) << endl;
14     cout << "a - b = " <<
15         MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
16     cout << "a * b = " <<
17         MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
18     cout << "a / b = " <<
19         MathFuncs::MyMathFuncs::Divide(a, b) << endl;
20 
21     return 0;
22 }    

  5.编译,生成

  

  以上就是静态库的基本使用步骤,记录下来,以防自己忘掉。

  注:其实

  #pragma comment( lib, "..\staticLib\MyExecRefsLib.lib" )     //加载静态库   

    这个代码可以去掉,改为手动在 项目/**属性 中设置

    1."VC++ 目录" 的 "库目录"  加上刚刚的 ".lib"文件所在目录.

    2."连接器"       的 "输入"   的 “附近依赖项” 加上 库的文件名 "*.lib".

原文地址:https://www.cnblogs.com/sixbeauty/p/3638060.html