1.静态链接库的生成和使用

1.什么时静态链接库

静态库(Static Library)通常包含一堆程序员自定义的变量与函数,在编译期间由编译器和链接器将它集成到可执行文件中,也就是生成的.exe文件中

2.静态库的扩展名

在Windows下,静态库的扩展名是.lib,在Linux下是.a

3.静态库的优缺点

1)优点:

发布时只需发布.exe文件,因为库已经集成到可执行文件中,运行时不再依赖库

2)缺点:

静态库集成到.exe文件中,导致.exe文件较大,同时,如果后续想要升级库必须重新编译.exe文件

4.创建静态库的步骤

1)创建静态库项目

1.静态链接库的生成和使用_第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文件:

1.静态链接库的生成和使用_第2张图片

 

5.使用静态库

1)正常一样创建一个控制台应用程序

2)在文件中添加头文件:StaticLib.h(注意这个头文件的位置,建议拷贝到当前项目目录下)

如果在这里直接运行,便会得到错误:

3)在项目中添加lib文件,两种方法(选其一):

a)在文件中添加语句:

#pragma comment(lib,"../Debug/StaticLib.lib")

(注意lib文件的位置,这里可以添加相对路径,也可以添加绝对路径,建议也把lib文件放在当前项目下吧)

(把跟项目相关的文件放在项目下是一个好习惯,可以避免人家对你项目依赖项的寻找)

b)项目右键-》属性-》连接器-》附加库目录,在里面加入静态库所在的路径

1.静态链接库的生成和使用_第3张图片

 继续点击输入-》附加依赖项,在里面加入StaticLib.lib

1.静态链接库的生成和使用_第4张图片

这样编译也会成功

实例,main.cpp中:

#include 
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;
}

执行:

1.静态链接库的生成和使用_第5张图片

如果我们删除StaticLib.lib文件,双击.exe文件我们也能得到这样的结果(如果输出框一闪而过,就在命令提示符中运行.exe文件)

1.静态链接库的生成和使用_第6张图片

 

6.注意

1)如果上面两种方法都在同一个项目中采用了,也是不会出错的

2)用在32位生成的lib文件在64位的应用程序使用时,出现:

3)如果用64位生成的lib文件在32位的应用程序中使用时,出现:

所以,应该使用与应用程序位数相同的lib文件,不可交叉使用

 

你可能感兴趣的:(静动态链接库)