详解vs2022创建及调用.lib的方法
作者:MINO吖
静态库
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的目录进行配置。
- .h 头文件目录的配置项(任选一个配置即可):
- VC++目录 - 包含目录
- C/C++ - 附加包含目录
- .lib 库文件目录的配置项(任选一个配置即可):
- VC++目录 - 库目录
- 链接器 - 附加库目录
配置好(附加)包含目录和(附加)库目录之后,将 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的原则就是:可以让编译器找到头文件和库文件的目录,并正确引入。
只要符合这一点,以上方法可以任意搭配使用。
到此这篇关于vs2022创建及调用.lib的方法的文章就介绍到这了,更多相关vs2022创建调用.lib内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!