摘自 http://msdn.microsoft.com/zh-cn/library/ms235627.aspx
一、创建静态库
1、创建一个项目,项目类型选择“静态库”
2、选择预编译头文件
3、示例代码
// MathFuncsLib.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);
};
}
// MathFuncsLib.cpp
// compile with: /c /EHsc
// post-build command: lib MathFuncsLib.obj
#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;
}
}
4. 如果 使用vs,编译生成即可。如果是在命令行中编译,
则先用命令
cl.exe /c filename.cpp
编译得到MathFuncsLib.obj文件,再用命令 lib MathFuncsLib.obj 得到lib文件。即是一个静态库
二 、 使用静态链接库
在应用程序中使用静态库的功能
-
创建控制台应用程序后,该向导将为您创建一个空程序。 源文件的名称与您在前面为项目选择的名称相同。 在本示例中,名为“MyExecRefsLib.cpp”。
-
您必须引用所创建的静态库才能使用其算术例程。 为此,请在“项目”菜单中选择“引用”。 在 MyExecRefsLib“属性页”对话框中,展开“通用属性”节点,然后单击“添加新引用”。 有关“引用”对话框的更多信息,请参见“<Projectname> 属性页”对话框 ->“通用属性”->“框架和引用”。
-
将显示“添加引用”对话框。 “项目”选项卡列出了当前解决方案中的各个项目以及可以引用的所有库。 在“项目”选项卡中,选择 MathFuncsLib。 单击“确定”。
-
若要引用 MathFuncsLib.h 头文件,必须修改包含目录路径。 在 MyExecRefsLib“属性页”对话框中,展开“配置属性”节点,展开“C/C++”节点,然后选择“常规”。 在“附加包含目录”属性值中,键入 MathFuncsLib 目录的路径或浏览至该目录。
若要浏览至目录路径,请在属性值下拉列表框中单击“编辑”。 在“附加包含目录”对话框中的在文本框中选择一个空行,然后单击行尾的省略号按钮(“…”)。在“选择目录”对话框中,选择 MathFuncsLib 目录,然后单击“选择文件夹”保存所做的选择并关闭对话框。 在“附加包含目录”对话框中,单击“确定”。
-
现在即可在此应用程序中使用 MyMathFuncs 类。 为此,请将 MyExecRefsLib.cpp 的内容替换为下面的代码。
// MyExecRefsLib.cpp // compile with: /EHsc /link MathFuncsLib.lib #include <iostream> #include "MathFuncsLib.h" using namespace std; int main() { double a = 7.4; int b = 99; cout << "a + b = " << MathFuncs::MyMathFuncs::Add(a, b) << endl; cout << "a - b = " << MathFuncs::MyMathFuncs::Subtract(a, b) << endl; cout << "a * b = " << MathFuncs::MyMathFuncs::Multiply(a, b) << endl; cout << "a / b = " << MathFuncs::MyMathFuncs::Divide(a, b) << endl; return 0; }
-
如果使用命令行方式,只需要在MyExecRefsLib.cpp中添加一行
指定要包含的lib文件即可#pragma comment(lib, "MathFuncsLib.lib")
也可以不添加这句话,但是编译和链接要分开进行
先编译为.obj文件
cl.exe /c MyExecRefsLib.cpp //得到MyExecRefsLib.obj文件
然后与MathFuncsLib.lib链接
link MyExecRefsLib.obj MathFuncsLib.lib