0

当我运行一个程序(在 linux 中)时,它是否都被加载到物理内存中?如果是这样,在缓存方面是否使用共享库而不是静态库?一般来说,什么时候应该使用共享库,什么时候应该使用静态库?如果重要的话,我的代码是用 C 或 C++ 编写的。

4

2 回答 2

3

这篇文章涵盖了您想要的一些不错的基础。本文更深入地介绍了共享库的优势

SO 也深入探讨了这个话题

静态库和共享库的区别?

何时使用动态库与静态库

几乎所有上述文章都偏向共享库。维基百科试图拯救静态库:)

来自维基

将库与可执行文件静态链接而不是动态链接它们有几个优点。最重要的是应用程序可以确定它的所有库都存在并且它们是正确的版本。这避免了依赖问题。通常,静态链接会带来显着的性能提升。

静态链接还可以允许将应用程序包含在单个可执行文件中,从而简化分发和安装。

使用静态链接,包含目标可执行文件(或目标库)直接和间接引用的库的那些部分就足够了。

使用动态库时,会加载整个库,因为事先不知道应用程序将调用哪些函数。这种优势在实践中是否显着取决于库的结构。

于 2012-04-11T16:40:05.853 回答
1

当您具有可以在不同程序之间使用和“共享”的功能时,主要使用共享库。在这种情况下,您将有一个点,所有程序都将获得它们的方法。但是,这会产生依赖性问题,因为现在您编译的程序依赖于该库的特定版本。

当您不想遇到依赖问题并且不希望您的程序关心目标系统上安装了哪些 X 或 Y 库时,通常会使用静态库。

那么,使用哪一个呢?为此,您应该回答以下问题:

  1. 您的程序会在不同的平台或 Linux 发行版上使用吗?(例如红帽、Debian、SLES11-SP1)
  2. 您是否复制了不同二进制文件正在使用的代码?
  3. 您是否设想将来其他程序可以从您的工作中受益?

我认为这是一个个案决定,它不是一个适合所有类型的答案。

于 2012-04-11T16:42:36.370 回答