windows 动态库和静态库 介绍
2023-12-22 17:34:05
在Windows平台上,动态库和静态库都是用于组织和共享代码的方式。这些库文件的扩展名和用途有一些区别。
1. 静态库和动态库
-
静态库(Static Library):
- 文件扩展名:
.lib
- 在编译链接时,静态库的代码被直接嵌入到可执行文件中。
- 优点:编译后的可执行文件独立,不依赖外部库文件。
- 缺点:如果多个程序使用同一个静态库,会导致代码冗余。
- 文件扩展名:
-
动态库(Dynamic Link Library):
- 文件扩展名:
.dll
- 在编译链接时,程序只包含对动态库的引用,实际的代码在运行时才会加载。
- 优点:节省内存,多个程序可以共享同一个动态库。
- 缺点:程序运行时需要确保能找到对应版本的动态库。
- 文件扩展名:
2. Windows下的库文件
-
静态库:
- 静态库在Windows上通常使用
.lib
扩展名。例如:mylib.lib
- 在使用静态库的项目中,需要在项目属性的链接器设置中添加
.lib
文件。
- 静态库在Windows上通常使用
-
动态库:
- 动态库在Windows上通常使用
.dll
扩展名。例如:mylib.dll
- 在使用动态库的项目中,需要在项目属性的链接器设置中添加
.lib
文件(这是用于链接动态库的导入库)。 - 动态库还需要在运行时找到,可以将
.dll
文件放在程序可执行文件所在的目录,或者添加到系统路径中。
- 动态库在Windows上通常使用
3. 导入库(Import Library)
-
导入库是什么:
- 在Windows上,用于链接动态库的
.lib
文件通常被称为导入库。导入库实际上是一种特殊的静态库,包含了调用动态库函数的信息。
- 在Windows上,用于链接动态库的
-
导入库的生成:
- Visual Studio 编译动态库时,会自动生成一个与动态库同名但扩展名为
.lib
的导入库。 - 这个导入库包含了动态库的函数信息,用于在链接时告诉编译器如何调用动态库中的函数。
- Visual Studio 编译动态库时,会自动生成一个与动态库同名但扩展名为
4. 使用静态库的步骤
-
编写代码并编译成目标文件(
.obj
):cl /c mylib.cpp
-
将目标文件打包成静态库:
lib /OUT:mylib.lib mylib.obj
-
在项目中链接静态库:
- 在 Visual Studio 中,将
mylib.lib
添加到项目属性的链接器设置中。
- 在 Visual Studio 中,将
5. 使用动态库的步骤
-
编写代码并编译成目标文件(
.obj
):cl /c mylib.cpp
-
编写代码并编译成动态库(
.dll
):cl /LD mylib.obj
-
在项目中链接动态库:
- 在 Visual Studio 中,将
mylib.lib
(导入库)添加到项目属性的链接器设置中。 - 将
mylib.dll
放置在可执行文件所在目录或者添加到系统路径中。
- 在 Visual Studio 中,将
总结
- 静态库和动态库都是在组织和共享代码方面的重要概念。
- 静态库在链接时直接嵌入到可执行文件中,而动态库在运行时加载。
- 在Windows上,静态库使用
.lib
扩展名,动态库使用.dll
扩展名。 - 链接动态库时需要使用导入库(
.lib
文件)提供函数信息。
上文是简单的介绍,实际使用过程中可能还涉及到一些特殊情况和编译器/工具的不同行为。
文章来源:https://blog.csdn.net/qq_39054069/article/details/135157622
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!