15 静态连接库和动态链接库

静态链接库就是一种软件模块化开发的一种解决方案;
VS2013静态库的制作简单示例:
创建Win32项目,然后选择静态库,添加如下两个简单文件,编译生成静态库就可以使用了;

/*
 *add.h
 */
#ifndef ADD_H
#define ADD_H
int add(int x, int y);
#endif
/*
*add.c
*/
#include "add.h"

int add(int x, int y)
{
	return x + y;
}

静态库的使用:
将头文件和生成的静态库放入test.c同级目录下;然后如参照以下代码一样使用,也可以将其放入VS中头文件、库等路径下就能像标准库一样使用了;

/*
 *test.c
 */
#include <windows.h>
#include "add.h"
//加上使用的静态库
#pragma comment (lib, "add.lib")

int WINAPI WinMain(HINSTANCE hInstance,					//入口函数,WINAPI即是__stdcall(函数调用约定的一种)
	HINSTANCE hPrevInstance,
	PSTR szCmdLine,
	int iCmdShow)
{
	int x = add(3, 5);
	return 0;
}

静态库的缺点:
1.使用静态库生成的可执行文件体积比较大;
2.包含相同的公共代码,造成浪费;

动态链接库:即Dynamic Link Library,缩写.DLL;是微软在Windows操作系统上实现共享函数库概念的一种方式,其扩展名有.dll、 .ocx;
实例如下:

/*
 *add.h
 */
#ifndef ADD_H
#define ADD_H
_declspec(dllexport)  int add(int x, int y); 
#endif
/*
 *add.c
 */
#ifndef ADD_H
#define ADD_H
_declspec(dllexport)  int add(int x, int y);
#endif
#include "add.h"

_declspec(dllexport)  int add(int x, int y)
{
	return x + y;
}
/*
 *test.c
 */
#include <windows.h>
#include "add.h"
//加上使用的静态库(这里的静态库只包含一些辅助信息,和上面静态库不一样)
#pragma comment (lib, "add.lib")

int WINAPI WinMain(HINSTANCE hInstance,					//入口函数,WINAPI即是__stdcall(函数调用约定的一种)
	HINSTANCE hPrevInstance,
	PSTR szCmdLine,
	int iCmdShow)
{
	int x = add(3, 5);
	return 0;
}

和静态库使用一样,只是最后将.dll放入可执行程序路径下;

猜你喜欢

转载自blog.csdn.net/lifeshave/article/details/85029072