静态链接库和动态链接库的区别

这篇具有很好参考价值的文章主要介绍了静态链接库和动态链接库的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

静态链接库

  • 在编译时将库的代码(.lib文件)和应用程序的代码合并在一起,生成一个单独的可执行文件。
  • 发布时非常方便,直接一个.exe文件即可

动态链接库(共享库)

  • 库的代码在编译时和链接时与应用程序分开。应用程序包含对库的引用(.lib文件,在这里被称为导入库),但不包含库的实际代码。
  • 运行时,操作系统加载共享库(dll),并将其与应用程序连接。

在对你的项目进行依赖设置时就会发现,链接静态库和动态库的步骤是基本一致的,比如用Premake工具维护的项目中,在premake.lua文件中,通过links{myStaticLibrary, mySharedLibrary }来链接库;比如Cmake维护的项目中,通过target_link_libraries(MyProject PRIVATE LibraryName)来链接库,并没有区分是静态还是动态,编译器一般会自己判断。额外的,如果是动态库,还需要把.dll文件放在可执行文件的目录下。

链接一个共享库和静态库都是link一个.lib文件,区别是,链接共享库时这个.lib是作为一个导入库来使用,这个 .lib 文件包含了链接器在编译时所需的符号信息(类似于头文件的概念,只包含声明,但没有实现),这使得编译器能够在编译阶段正确引用 dll 中的函数和数据(dll存放的才是真正的可执行代码)。

总结一下,一个动态库的链接:

  • 编译时链接(Compile-Time Linking): 通过 .lib 文件,在编译阶段将项目与 DLL 相关联,以获取符号信息。
  • 运行时加载(Run-Time Loading): 在程序运行时动态加载 DLL 文件,获取其中的实际代码和数据。

选择静态链接还是动态链接取决于应用程序的需求和设计考虑。静态链接适用于独立分发,而动态链接则有助于节省系统资源和更新库代码。

大多数游戏引擎通常会使用动态链接库(DLL)的方式进行链接。有几个优点:

  1. 节省内存空间: 游戏引擎通常具有大量共享的功能和资源,如图形渲染、物理模拟、声音处理等。通过动态链接,多个游戏实例可以共享相同的引擎部分,减少内存占用。

  2. 灵活更新: 如果游戏引擎的某个模块需要更新,你只需要替换相应的动态链接库文件,而不必重新构建整个游戏。这有助于减少发布更新所需的时间。

  3. 插件支持: 动态链接库的模块化特性使得游戏引擎可以更容易地支持插件。新的功能可以通过添加新的动态链接库来扩展游戏引擎,而无需修改已有的代码。

  4. 维护性: 游戏引擎的不同部分可以独立开发和维护,因为它们都可以作为独立的动态链接库。这有助于团队合作和代码维护。、


库存在的最大的意义就是为了将一组相关的代码(比如多个cpp文件,定义了非常多的函数、类等等)打包成一个单一的单元,以便在其他项目或者同一项目的不同部分中共享和重用

比如你是想编译100个cpp ,还是直接链接一个.lib 或 .dll 明显后者方便文章来源地址https://www.toymoban.com/news/detail-679509.html

到了这里,关于静态链接库和动态链接库的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于静态库和动态库的操作

    目录 静态库 动态库 1.增加.o文件: 2.删除.o文件: 查看静态库和动态库中的函数名 1.查看静态库中的函数名(以libexample.a为例): 2. 查看动态库中的函数名(以libexample.so为例): 查看动态库和静态库是32位,还是64位 1.  如果是动态库,可以使用: file *.so   2. 如果是静态库,可

    2024年02月07日
    浏览(25)
  • Linux中静态库和动态库的使用

    介绍: 库是一个二进制文件,包含的代码可被程序调用 标准C库、数学库、线程库… 库有源码,可下载后编译;也可以直接安装二进制包 位置一般放在:/lib /usr/lib 库的知识 库是事先编译好的,可以复用的代码 在os上运行的程序基本上都要使用库,使用库可以提高开发效率

    2024年01月25日
    浏览(26)
  • Rust : 与C交互动态库和静态库的尝试

    rust调用C端的库函数,有很多方法,场景也有所不同。包括windows还是linux,内置库还是自定义库,还是三方库等等。 一、rust调用其内置的C库 这个很简单,直接把extern \\\"C\\\"引入即可: 比如,在rust端main.rs中: 不需要做其它的处理,直接cargo run 就可以运行。 二、自定义的C库-以

    2024年02月04日
    浏览(31)
  • linux下g++链接动态库和静态库

    头文件的作用: include的作用就是复制内容到当前文件 井号开头的就是预处理指令,由预处理器处理,预处理阶段不关心代码,只处理预处理指令。 头文件主要 一是为了解决代码都写在一个文件太大了,二是把变量,结构体,函数声明这些固定的放在一起 函数只要声明了,

    2024年02月09日
    浏览(36)
  • 【linux深入剖析】动态库的使用(续) | 动静态库的链接

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 回顾上节,我们在创建了动态库libmymath.so 我们使用指令 gcc main.c -L. -lmymath -L . (-L + 路径表示myc这个库在哪

    2024年04月15日
    浏览(28)
  • 【探索Linux】—— 强大的命令行工具 P.13(文件系统 | 软硬链接 | 动态库和静态库)

    在计算机科学领域中,Linux 系统一直以来都是备受推崇的操作系统之一。其中,文件系统、软硬链接、动态库和静态库是 Linux 系统中非常重要的概念,在实际应用中扮演着不可或缺的角色。 在上一篇文章中,我们了解了 Linux 系统中文件描述符、重定向以及基础 IO 操作的相关

    2024年02月04日
    浏览(37)
  • 【Linux系统编程】Linux下的编译器——gcc/g++的使用 及 动态库和静态库的认识

    这篇文章我们继续学习Linux中的开发工具,今天要学的是: Linux下的编译器——gcc/g++ 我们先来简单了解一下它们的概念: gcc (GNU Compiler Collection) 和 g++ 是 Linux 系统上最常用的编译器。它们是 GNU 组织开发的一套开源编译器工具集。 gcc: gcc 是 GNU 编译器集合中的 C 语言编译器。

    2024年02月16日
    浏览(31)
  • Linux操作命令&静态库和动态库区别&大小端&孤儿僵尸进程

    cd:切换当前目录 ls:查看当前文件与目录 grep:通常与管道符命令一起使用,用于对一些命令的输出进行筛选和加工 cp:复制文件或文件夹 mv:移动文件或文件夹 rm:删除文件或文件夹 ps:查看进程情况 kill:向进程发送信号 tar:对文件进行打包 cat:查看文件内容 top:查看

    2024年02月16日
    浏览(28)
  • HAL库和标准库的区别

    本文回答来源于chat gpt4,非原创,也是我初学过程中所遇到的问题,答案分享给大家,如有侵权请联系删除: HAL 库(Hardware Abstraction Layer,硬件抽象层)和标准库(Standard Peripheral Library,标准外设库,又称为 SPL)都是 STM32 微控制器的固件库。它们的主要区别在于结构和抽象

    2024年02月07日
    浏览(21)
  • 动态库和静态库

    1. 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。 2. 动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。 3. 一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个

    2024年02月09日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包