1.什么时静态链接库
静态库(Static Library)通常包含一堆程序员自定义的变量与函数,在编译期间由编译器和链接器将它集成到可执行文件中,也就是生成的.exe文件中
2.静态库的扩展名
在Windows下,静态库的扩展名是.lib,在Linux下是.a
3.静态库的优缺点
1)优点:
发布时只需发布.exe文件,因为库已经集成到可执行文件中,运行时不再依赖库
2)缺点:
静态库集成到.exe文件中,导致.exe文件较大,同时,如果后续想要升级库必须重新编译.exe文件
4.创建静态库的步骤
1)创建静态库项目
2)添加.h和.cpp文件
在StaticLib.h中:
#pragma once
int SquareSum(int a, int b);
int SumSquare(int a, int b);
在StaticLib.cpp:
#include "stdafx.h"
#include "StaticLib.h"
int SquareSum(int a, int b)
{
return (a * a + b * b);
}
int SumSquare(int a, int b)
{
return ((a + b) * (a + b));
}
注意添加头文件:stdafx.h
3)生成.lib文件
点击生成解决方案(不可点击运行),便得到了StaticLib.lib文件:
5.使用静态库
1)正常一样创建一个控制台应用程序
2)在文件中添加头文件:StaticLib.h(注意这个头文件的位置,建议拷贝到当前项目目录下)
如果在这里直接运行,便会得到错误:
3)在项目中添加lib文件,两种方法(选其一):
a)在文件中添加语句:
#pragma comment(lib,"../Debug/StaticLib.lib")
(注意lib文件的位置,这里可以添加相对路径,也可以添加绝对路径,建议也把lib文件放在当前项目下吧)
(把跟项目相关的文件放在项目下是一个好习惯,可以避免人家对你项目依赖项的寻找)
b)项目右键-》属性-》连接器-》附加库目录,在里面加入静态库所在的路径
继续点击输入-》附加依赖项,在里面加入StaticLib.lib
这样编译也会成功
实例,main.cpp中:
#include <iostream>
using namespace std;
#include "StaticLib.h"
//#pragma comment(lib,"../Debug/StaticLib.lib")
int main()
{
int a = 34;
int b = 12;
cout << SumSquare(a, b) << endl;
cout << SquareSum(a, b) << endl;
system("pause");
return 0;
}
执行:
如果我们删除StaticLib.lib文件,双击.exe文件我们也能得到这样的结果(如果输出框一闪而过,就在命令提示符中运行.exe文件)
6.注意
1)如果上面两种方法都在同一个项目中采用了,也是不会出错的
2)用在32位生成的lib文件在64位的应用程序使用时,出现:
3)如果用64位生成的lib文件在32位的应用程序中使用时,出现:
所以,应该使用与应用程序位数相同的lib文件,不可交叉使用