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".