What is static and dynamic libraries

他们有什么相同点吗?
都是库文件。对于调用库文件的使用者来说,不管是静态库还是动态库,调用的方式都是一样的,没什么区别。

Differences between static and dynamic libraries

动态库和静态库的区别在于编译阶段的不同

  • 静态库编译的时候,会把导入的第三方库文件一起打包成一个静态库。
  • 动态库编译的时候,只把需要导入的第三方库文件的链接信息记录下来,真实的库和代码不会包含在执行文件里,使用这种方式生成一个动态库。 调用者在使用的时候,去请求动态库里面的函数的时候,如果需要调用第三方库文件,就是根据打包时记录的动态库链接信息去系统里面找这个第三方库文件(在Windows操作系统中,部分动态链接库被存放于C:\Windows\System32目录下),如果所有路径都找不到引用的库文件,就会执行失败。

在Linux操作系统下,动态库也被称为“共享函数库”,更能从名称上体现它的意义。动态链接库有两个好处:

  1. 首先是可以节约内存和磁盘空间;
  2. 其次是在函数库升级时不需要重新编译、链接使用该库的程序。

做一个编程上的比喻:

  • 静态库编译的时候类似值传递(Pass by Value);
  • 动态库编译的时候类似引用传递(Pass by Reference);

How do the two techniques compare in terms of application?

不管是提供什么库文件给使用者,都是希望使用者能顺利调用的,
如果你能确认使用者的设备里面一定有这些第三方库文件,可以打包成动态库,打包成动态库还能节省使用者的资源。
如果不能确认使用者的设备里面一定有这些第三方库文件,那么还是保险点,打包成一个静态库给他。

Reference

C++静态库与动态库
https://www.cnblogs.com/skynet/p/3372855.html

Differences between static and dynamic libraries
https://www.linkedin.com/pulse/differences-between-static-dynamic-libraries-juan-david-tuta-botero

引用传递(pass by reference):
描述如何将实参传递给引用类型的形参。引用形参和其他形式的引用工作机理相似,形参被绑定到相应的实参上。

值传递(pass by value):
描述如何将实参传递给非引用类型的形参。非引用类型的形参实际上是相应实参值的一个副本。

posted on 2023-03-25 13:52  Mysticbinary  阅读(49)  评论(0编辑  收藏  举报