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

 更新时间:2022年11月18日 10:39:17   作者:MINO吖  
这篇文章主要介绍了vs2022创建及调用.lib的方法,调用Lib的原则就是可以让编译器找到头文件和库文件的目录,并正确引入,本文给大家详细讲解需要的朋友可以参考下

静态库

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • OpenCV图像特征提取之Shi-Tomasi角点检测算法详解

    OpenCV图像特征提取之Shi-Tomasi角点检测算法详解

    Harris角点检测算法就是对角点响应函数R进行阈值处理,Shi-Tomasi原理几乎和Harris一样的,只不过最后计算角点响应的公式发生了变化。本文将和大家详细说说Shi-Tomasi角点检测算法的原理与实现,需要的可以参考一下
    2022-09-09
  • C++写注册表项实例

    C++写注册表项实例

    这篇文章主要介绍了C++写注册表项实例,可实现开机启动的功能,是进行Windows桌面应用程序开发中非常重要的技巧,需要的朋友可以参考下
    2014-10-10
  • Qt中QStackedWidget控件的实现

    Qt中QStackedWidget控件的实现

    QStackedWidget是Qt框架中一个非常有用的控件,它允许你堆叠多个窗口部件,本文主要介绍了Qt中QStackedWidget控件的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • 使用Objective-C获取IPHONE手机IMSI序列号

    使用Objective-C获取IPHONE手机IMSI序列号

    这篇文章主要介绍了使用Objective-C获取IPHONE手机IMSI序列号的方法以及通过IMSI序列号获取运营商、手机号的方法,非常的实用,有需要的小伙伴可以参考下。
    2015-04-04
  • C++中的模板类继承和成员访问问题

    C++中的模板类继承和成员访问问题

    这篇文章主要介绍了C++中的模板类继承和成员访问问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • exec()函数在C++中的应用及其用法

    exec()函数在C++中的应用及其用法

    exec()函数在C++中是一个进程控制函数,用于创建新进程执行其他程序或命令行指令。exec()函数可以替换当前进程的代码和数据,创建新的进程运行其他程序。exec()函数有多个版本,例如execl、execv、execle、execve等,根据不同的参数类型和个数来使用
    2023-05-05
  • vscode+platformIO开发stm32f4的实现

    vscode+platformIO开发stm32f4的实现

    这篇文章主要介绍了vscode+platformIO开发stm32f4的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • c语言单词本的新增、删除、查询按顺序显示功能

    c语言单词本的新增、删除、查询按顺序显示功能

    这篇文章主要介绍了c语言单词本的新增、删除、查询按顺序显示功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C语言通过深度优先搜索来解电梯问题和N皇后问题的示例

    C语言通过深度优先搜索来解电梯问题和N皇后问题的示例

    深度优先搜索即是对一个新发现的节点上如果还关联未探测到的边,就沿此边探测下去,直到发现从原点可达的所有点为止,这里我们就来展示C语言通过深度优先搜索来解电梯问题和N皇后问题的示例
    2016-06-06
  • C++ Qt开发之PushButton按钮组件的使用详解

    C++ Qt开发之PushButton按钮组件的使用详解

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,本文将重点介绍QPushButton按钮组件的常用方法及灵活运用,感兴趣的小伙伴可以学习一下
    2023-12-12

最新评论