gpt4 book ai didi

c++ - 交叉编译时的文件大小差异

转载 作者:太空狗 更新时间:2023-10-29 12:05:43 28 4
gpt4 key购买 nike

我正在用 c++ 编写一个小应用程序,它在我的主机 (linux x86) 和目标机器 (arm) 上运行。
我遇到的问题是,在主机上我的二进制文件大小约为 700kb,但在目标机器上约为 7mb。
我为两个平台使用相同的编译开关。我的第一个想法是 arget 机器上的一个库被静态链接,但我用 objdump 检查了两个二进制文件,并且都使用相同的动态链接库。那么谁能告诉我如何找出大小差异如此巨大的原因?

最佳答案

虽然不同的计算机体系结构理论上可以为同一程序要求完全不同数量的可执行代码,但在现代体系结构中,10 倍的系数并不是真正期望的。 ARM 和 x86 可能有所不同,但它们仍然是在同一个宇宙中设计的,在这个宇宙中,内存和带宽是不容浪费的,这导致 CPU 设计人员尽可能地保持可执行代码的紧凑。

因此,我会按概率顺序查看以下可能性:

  • 符号剥离:如果两个二进制文件中的一个已从其符号中剥离,那么它会小得多,尤其是在使用调试信息编译时。您可能想尝试剥离两个二进制文件,看看会发生什么。

  • 静态链接:我偶尔会遇到嵌入式目标的构建系统,它们更喜欢静态链接而不是使用共享库。检查每个二进制文件的库依赖性可能会检测到这一点。

  • 附加启用代码:较大的二进制文件可能启用附加代码,因为例如构建系统发现了一个额外的可选库,或者因为目标平台需要特定的句柄。

    不过,10 倍可能太多了,除非较小的二进制文件缺少很多功能,或者较大的二进制文件已静态链接到某些可选库中。

  • 不同的编译器配置:您不仅应该查看 提供的编译器选项,还应该查看编译器为每个目标使用的默认值。例如,如果编译器在一种架构中具有明显更高的内联或循环展开限制,则生成的可执行文件可能会明显膨胀。

关于c++ - 交叉编译时的文件大小差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750326/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com