dll & lib 库文件使用及项目属性配置
什么是dll lib?
lib, library的缩写,静态链接库。LIB有两种:
一种是静态库,这种LIB中有函数的实现代码,一般用在静态连编上,它是将LIB中的代码加入目标模块(EXE或者DLL)文件中,所以链接好了之后,LIB文件就没有用了。
一种LIB是和DLL配合使用的,LIB里面没有代码,代码在DLL中,这种LIB是用在静态调用DLL上的,所以起的作用也是链接作用,链接完成了,LIB也没用了。动态调用DLL用不上LIB文件, 目标模块(EXE或者DLL)文件生成之后,就用不着LIB文件了。
dll, Dynamic Link Library的缩写,动态链接库。
DLL是一个包含可由多个程序同时使用的代码和数据的库。
项目属性配置
下面采用一个简单的例子说明如何在配置属性中将lib,dll 文件导入当前项目。
1. 首先创建一个静态库项目
![]() |
![]() |
在头文件 framework.h中输入以下内容:
#pragma once
#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容
// 一个简单的乘法运算
class Multiply
{
public:
Multiply(int a, int b);
~Multiply();
private:
int A, B;
int M;
};
在源文件 StaticLib.cpp中输入以下内容:
// StaticLib1.cpp : 定义静态库的函数。
//
#include "pch.h"
#include "framework.h"
#include <iostream>
using namespace std;
// 构造函数
Multiply::Multiply(int a, int b) :A(a), B(b)
{
M = A * B;
cout << "A * B = " << M << endl;
}
// 析构函数
Multiply::~Multiply()
{}
// TODO: 这是一个库函数示例
void fnStaticLib1()
{
}
按 F7 生成解决方案,会在 …\StaticLib1\Debug 文件夹下生成 StaticLib1.lib文件。
2. 创建一个空项目
![]() |
![]() |
在 Project1.h 中输入以下内容:
#pragma once
#ifndef TEST_H
#define TEST_H
int add(int a, int b)
{
return a + b;
}
#endif
在 Project1.cpp 中输入以下内容:
#include "Project1.h"
#include "framework.h"
#include <iostream>
using namespace std;
int main(int argc, char** argv[])
{
int a = 3;
int b = 6;
int Sum = 0;
// 调用当前项目的头文件中的代码
Sum = add(a, b);
cout << "Sum = "<< Sum << endl;
// 调用lib中的代码
Multiply(a, b);
system("pause");
return 0;
}
3. 配置属性
首先需要知道当前项目的文件在什么位置
第0级 | 第一级 | 第二级 | 第三级 | 第四级 |
---|---|---|---|---|
Project | Project1 | Project1 | Project1.cpp | |
Project1.h | ||||
Project1.vcxproj | ||||
Project1.sln | ||||
StaticLib | Debug | StaticLib1.lib | ||
StaticLib1 | framework.h | |||
StaticLib.cpp | ||||
StaticLib.vcxproj | ||||
StaticLib.sln | ||||
lib | StaticLib1.lib |
在第一级目录下重新创建一个 lib 文件夹,将生成的 Static.lib 文件拷贝到 lib 文件夹里。
在配置过程中用到的路径,是以当前项目 Project1.vcxproj 所在的位置为基准,采用相对路径
" .\ " 表示当前路径;
" …\ " (2个点,CSDN有BUG)表示上一路径;
" …\ …\ " (真是两个点,不是三个)表示上上一路径。
点击 “项目->属性” 或使用快捷键 “Alt + F7” 打开属性配置对话框
1. C++ 常规 附加包含目录 (指的是当前项目中include的头文件的路径)
以当前项目 “Project1.vcxproj” 所在的位置为基准,找到程序所包含的头文件所在的路径,采用两个 “…\” 回到第一级目录下,在 StaticLib1 文件夹下的 StaticLib1 子文件夹中有头文件 “framework.h” 。所以附加包含目录为 “…\StaticLib1\StaticLib1”
2. 链接器 常规 附加库目录(指的是 “.dll” 文件的路径)
同样以当前项目 “Project1.vcxproj” 所在的位置为基准,找到刚创建的lib文件夹所在的路径,采用两个 “…\” 回到第一级目录下 。所以附加包含目录为 “…\lib”
虽然这里还没有".dll"文件,但是如果有的话,建议也复制到 “lib” 文件夹内
3. 链接器 高级 导入库(指的是 “.lib” 文件的路径)
这个才是"lib"文件路径,听别人说哈,我不确定-_-
4. 链接器 输入 附加依赖项(输入要用到的“.dll”或“.lib”文件名即可)
到这里就配置完了,可以按 F7 生成解决方案, 没有问题的话,按 Ctrl + F5 运行即可。
运行结果如下: