本文主要来分享一下windos环境下的静态链接库和动态链接库
测试环境:vs2017
一、静态链接库实例
***libPri.h***
#pragma once
extern "C" int add(int a, int b);
***libPri.cpp***
#include <iostream>
#include "libPrj.h"
//lib文件拷贝到exe同级目录下。.h能找到就好
***calllib.cpp***
#include <iostream>
#include <stdlib.h>
#include "../Debug/libPrj.h"
#pragma comment(lib,"libPrj.lib")
int main()
{
std::cout << add(1, 2) << std::endl;
}
运行结果:
3
二、动态链接库实例
注意事项:
1、函数声明需要添加 __declspec(dllexport) (__declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用,省略给出.def文件。即将函数、类等声明为导出函数,供其它程序调用,作为动态库的对外接口函数、类等),如果不添加 __declspec(dllexport),不会生成.lib文件。
2、工程配置为dll,可以在创建工程的时候直接选择创建dll工程,也就可以默认创建好之后再修改为dll工程都可以(记得创建win32控制台应用)
**********************dll工程****************************
***dllPrj.h***
#pragma once
__declspec(dllexport) int sum(int a,int b);
***dllPrj.cpp***
#include "dllPrj.h"
int sum(int a, int b)
{
return a + b;
}
********************调用dll工程**********************
***calldll.cpp***
#include <iostream>
#include "stdafx.h"
#include "dllPrj.h"
int main()
{
std::cout<<sum(1,2);
return 0;
}
运行结果同上,很简单,不赘述,而调用函数里需要注意.h文件、.lib文件、dlll文件的位置。
.h不再赘述
lib是编译链接使用(编译完成可以移除,但是如果需要重新编译则需要能链接到)
dll是运行使用
下面看一下文中代码在vs200中的配置
dll则放在exe同级目录下
人,总是要有一点精神的,不是吗?