直接链接和链接作为静态库之间的区别是什么

时间:2015-02-06 08:07:25

标签: compilation static-linking

之间是否有任何差异
gcc a.c b.c -o b.out

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

gcc b.c -la -o b.out

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

2 个答案:

答案 0 :(得分:0)

引用dmckee's answer的一部分:

  
      
  • 动态关联可以减少总资源消耗(如果多个进程共享同一个库(包括   版本“相同”,当然))。我相信这是争论的焦点   这促使它在大多数环境中出现。这里的“资源”   包括磁盘空间,RAM和缓存空间。当然,如果你的   动态链接器不够灵活,存在DLL hell的风险。

  •   
  • 动态链接意味着错误修复和升级到库传播以改进您的产品,而无需您运送任何内容。< / p>

  •   
  • 插件始终要求动态关联。
  •   
  • 静态链接,意味着您可以知道代码将在非常有限的环境中运行(在启动过程的早期,或在救援中)   模式)。
  •   
  • 静态链接可以使二进制文件更易于分发到不同的用户环境(以发送大量和更多内容为代价)   资源饥饿计划)。
  •   
  • 静态关联可能会略微更快启动次,但这在某种程度上取决于您的的复杂程度   程序和操作系统加载策略的细节。
  •   

阅读完整的答案以获取更具体的信息。

答案 1 :(得分:0)

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