伙计们,我有一个我为ARM Cortex-A8处理器编辑的项目。我正在利用海湾合作委员会来做到这一点。目前,我的可执行文件的大小为220.1 kb。现在我修改了makefile,然后添加标志 -mthumb, ,Makefile线看起来有些像这样 -

gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon

我对所有makefiles进行了更改,并构建了我的项目,但是可执行的我终于仍然仍然是220.1 kb。

我对我的命令行进行了一次更改,我添加了-Mthumb -interwork选项

gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon

我再次获得相同尺寸的可执行文件220.1 kb。我在这样做时是否错过了什么?

我写了一个小程序,以找到两个数字中的最小程序,然后使用以下命令行对其进行了编译

gcc main.c -o main

我得到8.5 kb的可执行文件

接下来,我做一个

gcc -mthumb main.c -o main

我仍然得到8.5 kb的可执行文件。

这里怎么了?

我做了一个 cat /proc/cpuinfo 看看拇指是否得到了我的处理器的支持,我看到它确实得到了支持。我得到 -

Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
有帮助吗?

解决方案

我认为-Marm意味着您有一只没有拇指的手臂,请尝试删除-Marm。

其他提示

没有实际的代码很难说,但是我有一些建议。

  1. 启用优化。 (例如-O3-赋予段-FDATA区)
  2. 剥离可执行文件以确保不计数调试信息。
  3. 检查实际的代码(.TEXT)大小,而不是文件大小。也许正在进行一些填充。您可以为此使用objdump。
  4. 丢弃装配代码(-s开关),并检查它实际上在一种情况下会产生ARM指令,然后在另一种情况下进行拇指。

使用一些编译器,拇指是编译ARMV7时的默认值。您确定您的原始可执行文件不是为了拇指而构建的吗?

尝试使用-mno -thumb构建,看看代码大小是否增加。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top