亲宝软件园·资讯

展开

详解vs2022创建及调用.lib的方法

MINO吖 人气:0

静态库

1. 静态库对函数库的链接是在编译期完成的。执行期间代码装载速度快。
2. 使可执行文件变大,浪费空间和资源(占空间)。
3. 对程序的更新、部署与发布不方便,需要全量更新。如果 某一个静态库更新了,所有使用它的应用④程序都需要重新编译、发布给用户。

动态库

1. 动态库把对一些库函数的链接载入推迟到程序运行时期(占时间)。
2. 可以实现进程之间的资源共享。(因此动态库也称为共享库)
3. 将一些程序升级变得简单,不需要重新编译,属于增量更新。

 1. 创建静态库(.lib)

添加一个“静态库” 的新项目 - StaticLib1

 预编译头选择“不使用预编译头”。

pch.h: 

选择使用预编译头文件的话,要创建对应的预编译头文件,并且在源文件中要引用预编译头文件。否则会报错。

staticLib1.h

#ifndef STATIC_LIB
#define STATIC_LIB
 
#include <iostream>
using namespace std;
 
void fnStaticLib1();
 
class StaticOne {
	int age;
public:
	StaticOne() {};
	StaticOne(int a);
	void sayHello();
};
 
#endif // !STATIC_LIB

staticLib1.cpp

#include <iostream>
#include "pch.h"
 
void fnStaticLib1()
{
    std::cout << "fnStaticLib1!" << std::endl;
}
 
StaticOne::StaticOne(int a) : age(a) {};
 
void StaticOne::sayHello() {
    std::cout << "Hello, C++." << std::endl;
};

右键项目,点击生成;并提示成功

2. 创建应用程序(.exe)

 index.cpp

#include "staticLib1.h"
#pragma comment(lib, "StaticLib1.lib")
 
void main() {
	StaticOne a(1);
	a.sayHello();
 
	fnStaticLib1();
}

3. 调用lib

3.1 方法1

3.1 通过调整文件路径实现调用

如上的index.cpp,肯定是会提示找不到对应的文件的。

所以可以将静态库的 .h和.lib 文件拷贝到.exe项目下,就可以正常运行了。

但是每次修改静态库代码后,重新生成.lib都要手动复制文件过来很麻烦。

可以修改index.cpp(具体根据自己的目录调整):

#include "../StaticLib1/staticLib1.h"
#pragma comment(lib, "../x64/Debug/StaticLib1.lib")

3.2 方法2

3.2 通过更改目录配置,让编译器可以在正确的目录读取到文件,然后引入。以此实现调用

3.1方法中不论是拷贝粘贴文件,还是使用路径引入文件都不太友好。

那么可以在.exe项目的属性页中对.h和.lib的目录进行配置。

配置好(附加)包含目录和(附加)库目录之后,将 index.cpp代码改为如下即可。

不需要写相对、绝对路径,因为编译器会在配置的(附加)包含目录和(附加)库目录中进行读取。

#include "staticLib1.h"
#pragma comment(lib, "StaticLib1.lib")

 甚至,可以3.1和3.2混合使用,只配置包含目录,不配置库目录。.lib文件通过相对/绝对路径进行引入。

3.3 方法三

3.3是在3.2的基础上,增加"附加依赖项"的配置,去掉pragma

通过3.2对目录进行配置之后就可以正常运行了。

但是每次在调用时除了引入.h之外,还要通过pragma comment引入.lib,也不太友好。

那么在3.2的基础上,我们可以在属性页中对依赖的库进行配置(链接器 - 输入 - 附加依赖项

填入.lib的名称。

 index.cpp

#include "staticLib1.h"
 
void main() {
	...
}

这样就不需要再填写pragma comment了。

3.4 方法四

3.4通过vs“引用”实现调用

1. 引入.h文件(通过路径引入或目录配置都可)

2. 添加引用 ,勾选对应的静态库

 index.cpp

#include "staticLib1.h"
 
void main() {
	...
}

调用Lib的原则就是:可以让编译器找到头文件和库文件的目录,并正确引入。

只要符合这一点,以上方法可以任意搭配使用。

加载全部内容

相关教程
猜你喜欢
用户评论