静态库和共享库之间的区别是什么?
我使用Eclipse,有几个项目类型,包括静态库和共享库?其中一种比另一种有优势吗?
静态库和共享库之间的区别是什么?
我使用Eclipse,有几个项目类型,包括静态库和共享库?其中一种比另一种有优势吗?
当前回答
静态库是作为应用程序的一部分编译的,而共享库不是。当您分发依赖于共享库的应用程序时,库,例如。需要安装MS Windows上的dll文件。
静态库的优点是用户运行应用程序时不需要依赖任何东西——例如,他们不需要升级他们的DLL。缺点是您的应用程序的大小更大,因为您附带了它所需的所有库。
除了导致更小的应用程序之外,共享库还为用户提供了使用他们自己的,也许是更好版本的库的能力,而不是依赖于应用程序的一部分
其他回答
简化:
静态链接:一个大型可执行文件 动态链接:一个小的可执行文件加上一个或多个库文件(Windows上是.dll文件,Linux上是.so文件,macOS上是.dylib文件)
对于静态库,代码由链接器从库中提取,并在编译/构建应用程序时用于构建最终的可执行文件。最终的可执行文件在运行时不依赖于库
对于共享库,编译器/链接器在构建应用程序时检查所链接的名称是否存在于库中,但不会将它们的代码移到应用程序中。在运行时,共享库必须可用。
C编程语言本身没有静态库或共享库的概念——它们完全是一种实现特性。
就我个人而言,我更喜欢使用静态库,因为它使软件分发更简单。然而,这一观点在过去曾引发大量(象征性的)流血冲突。
-------------------------------------------------------------------------
| +- | Shared(dynamic) | Static Library (Linkages) |
-------------------------------------------------------------------------
|Pros: | less memory use | an executable, using own libraries|
| | | ,coming with the program, |
| | | doesn't need to worry about its |
| | | compilebility subject to libraries|
-------------------------------------------------------------------------
|Cons: | implementations of | bigger memory uses |
| | libraries may be altered | |
| | subject to OS and its | |
| | version, which may affect| |
| | the compilebility and | |
| | runnability of the code | |
-------------------------------------------------------------------------
静态库是作为应用程序的一部分编译的,而共享库不是。当您分发依赖于共享库的应用程序时,库,例如。需要安装MS Windows上的dll文件。
静态库的优点是用户运行应用程序时不需要依赖任何东西——例如,他们不需要升级他们的DLL。缺点是您的应用程序的大小更大,因为您附带了它所需的所有库。
除了导致更小的应用程序之外,共享库还为用户提供了使用他们自己的,也许是更好版本的库的能力,而不是依赖于应用程序的一部分
共享库最显著的优点是,不管有多少进程在使用这个库,内存中只加载一份代码。对于静态库,每个进程都有自己的代码副本。这可能导致严重的内存浪费。
静态库的一个优点是所有东西都捆绑到应用程序中。因此,您不必担心客户端系统上是否有正确的库(和版本)可用。