Compilation 什么';直接链接和作为静态库链接的区别是什么

Compilation 什么';直接链接和作为静态库链接的区别是什么,compilation,static-linking,Compilation,Static Linking,两者之间有什么区别吗 gcc a.c b.c -o b.out 及 ? 在什么情况下,我应该选择一个而不是另一个?引用以下部分: 动态链接可以减少总资源消耗(如果多个进程共享同一个库(包括 当然,版本相同)。我相信这就是论点 这推动了it在大多数环境中的应用。这里是“资源” 包括磁盘空间、RAM和缓存空间。当然,如果你的 动态链接器不够灵活,存在发生错误的风险 动态链接意味着缺陷修复和库升级可以传播以改进您的产品,而无需您发货 插件总是需要动态链接 静态链接意味着您可以知道代码将在非常有限的

两者之间有什么区别吗

gcc a.c b.c -o b.out

?

在什么情况下,我应该选择一个而不是另一个?

引用以下部分:

  • 动态链接可以减少总资源消耗(如果多个进程共享同一个库(包括 当然,版本相同)。我相信这就是论点 这推动了it在大多数环境中的应用。这里是“资源” 包括磁盘空间、RAM和缓存空间。当然,如果你的 动态链接器不够灵活,存在发生错误的风险

  • 动态链接意味着缺陷修复和库升级可以传播以改进您的产品,而无需您发货

  • 插件总是需要动态链接
  • 静态链接意味着您可以知道代码将在非常有限的环境中运行(在启动过程的早期,或在rescue中) 模式)
  • 静态链接可以使二进制文件更容易分发到不同的用户环境(代价是发送大量的 资源匮乏计划)
  • 静态链接可能允许稍微更快的启动时间,但这在某种程度上取决于您的应用程序的大小和复杂性 程序和OSs加载策略的细节
阅读完整答案以获得更具体的信息。

当您要多次重复使用编译后的模块,并且项目非常大(它节省了一点编译时间)时,创建库(变体2)是很好的选择。否则,没有区别

gcc a.c -o a.o
ar rcs liba.a a.o

gcc b.c -la -o b.out