【问题标题】:About -ffunction-sections -fdata-sections and --gc-sections options关于 -ffunction-sections -fdata-sections 和 --gc-sections 选项
【发布时间】:2014-07-05 08:39:19
【问题描述】:

在我的 ARM 项目中,我使用以下内容来构建无 os-less 应用程序二进制文件:

arm-linux-gcc -Os -ffunction-sections -fdata-sections -o boot.o boot.S
arm-linux-gcc -Os -ffunction-sections -fdata-sections -o main.o main.c
arm-linux-ld -T link.lds --gc-sections -o target.bin boot.o main.o

这些工作正常。因为如果我删除“-ffunction-sections”、“-fdata-sections”和“--gc-sections”选项,target.bin 文件大小将增加近两倍..

但在 x86 平台上,同样的方法,我发现: 如果我不使用这些 gcc 和 ld 选项,输出是正常的,但是如果我使用这些选项作为 arm 平台,输出文件将是 0 字节。

【问题讨论】:

    标签: gcc x86 arm


    【解决方案1】:

    -Os -ffunction-sections -fdata-sections--gc-sections 应该可以在 x86 系统上运行。您确定您的程序和链接器脚本适用于 x86 吗?由于您的程序是为裸机 ARM 设计的,它可能没有 x86 操作系统的入口点,如果没有入口点,--gc-sections 选项会将所有内容都丢弃。

    顺便说一句,您的“问题”实际上没有问题。

    【讨论】:

    • 谢谢。 0字节输出只是问题。我重新定义了入口点,它可以工作了。
    • 但是我在 x86 gcc 中发现了另一个问题。如果我使用 -Os 选项,生成的二进制文件运行异常。如果我不添加 -Os 选项,输出的二进制大小会更大,但运行正常。你遇到过这样的问题吗?有时间我会调试的。
    • 我确实遇到过这样的问题,原因并不总是一样,所以我在这里帮不了你,但它通常与 C 未定义的行为有关(有很多未定义的行为在 C 中...),这可能会随着优化级别的变化而变化。
    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 2019-10-10
    • 2016-01-11
    • 2014-09-04
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多