首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我真的需要libgcc吗?

我真的需要libgcc吗?
EN

Stack Overflow用户
提问于 2012-02-23 14:08:00
回答 1查看 17.7K关注 0票数 23

我在MacOSX10.6上使用了GCC 4.6.2。我在编译时使用-static选项,否则我的二进制文件会在系统上查找libgcc,并且我不确定OS是否支持GCC 4.2。这很好,但是为什么我需要libgcc呢?我阅读了它,GNU文档说它包含“目标处理器无法直接执行的算术操作”。我怎么知道这些行动是什么?为什么他们这么复杂,我需要包括这个图书馆?为什么GCC不能直接优化代码而不是求助于这些库函数呢?我有点困惑。任何对此的洞察力都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-23 15:21:22

是的,你确实需要它..。可能吧。如果你不需要它,那么静态链接它是无害的。您可以通过使用-t链接跟踪选项(我认为)来判断是否需要它。

有很多事情你不能在一条指令中完成(通常是32位架构上的64位操作)。这些事情是可以完成的,但是如果它们使用的是大量的指令,那么将它们放在一个地方是更节省空间的。

当您使用-O0禁用优化时(这实际上是默认的),GCC几乎总是使用libgcc例程。

当您启用速度优化时,GCC可以选择将指令序列直接插入到代码中(如果它知道如何插入)。您可能会发现,它不会使用任何libgcc版本--它肯定会使用更少的libgcc调用。

当您启用大小优化时,GCC可能更喜欢函数调用,也可能不喜欢--这取决于GCC开发人员认为在每种情况下的最佳速度/大小权衡。请注意,即使您告诉它优化速度,编译器可能会判断某些函数不太可能被使用,并优化那些大小--如果你使用PGO的话。

基本上,您可以用与memcpy或数学库函数相同的方式来看待它:编译器将内联它认为是有益的函数,而调用库函数则不然。当然,编译器可以“内联”标准函数和libgcc函数,而无需查看库定义--它只是“知道”它们所做的事情。

是使用静态的还是动态的libgcc是一个有趣的权衡。一方面,动态(共享)库将在整个系统中使用较少的内存,并且更有可能被缓存,等等。另一方面,静态libgcc具有较低的调用开销。

不过,最重要的是兼容性。显然,要运行程序,libgcc库必须存在,但它也必须是兼容的版本。您可以在Linux发行版上使用稳定的GCC版本,但否则静态链接更安全。

我希望这能回答你的问题。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9414625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档