之间是否有任何差异
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
在什么情况下我会选择一个而不是另一个?
答案 0 :(得分:0)
引用dmckee's answer的一部分:
动态关联可以减少总资源消耗(如果多个进程共享同一个库(包括 版本“相同”,当然))。我相信这是争论的焦点 这促使它在大多数环境中出现。这里的“资源” 包括磁盘空间,RAM和缓存空间。当然,如果你的 动态链接器不够灵活,存在DLL hell的风险。
动态链接意味着错误修复和升级到库传播以改进您的产品,而无需您运送任何内容。< / p>
- 插件始终要求动态关联。
- 静态链接,意味着您可以知道代码将在非常有限的环境中运行(在启动过程的早期,或在救援中) 模式)。
- 静态链接可以使二进制文件更易于分发到不同的用户环境(以发送大量和更多内容为代价) 资源饥饿计划)。
- 静态关联可能会略微更快启动次,但这在某种程度上取决于您的和的复杂程度 程序和操作系统加载策略的细节。
阅读完整的答案以获取更具体的信息。
答案 1 :(得分:0)
当您要多次重复使用已编译的模块时,创建库(变体2)是很好的,并且项目非常大(它节省了一点编译时间)。否则,没有区别。