5

伙计们,我有一个为 ARM Cortex-A8 处理器编译的项目。我正在使用 GCC 来执行此操作。目前我的可执行文件的大小是 220.1 KB。现在我修改我的 makefile 并添加标志-mthumb,makefile 行看起来有点像这样 -

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

我在我的所有 makefile 中进行了这些更改并构建了我的项目,但我最终得到的可执行文件仍然是 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
....
....
4

3 回答 3

6

I think -marm means you have an arm with no thumb, try removing -marm.

于 2010-11-06T00:32:31.957 回答
2

没有实际代码很难说,但我有几个建议。

  1. 启用优化。(例如 -O3 -ffunction-sections -fdata-sections)
  2. 剥离可执行文件以确保不计算调试信息。
  3. 检查实际代码 (.text) 大小,而不是文件大小。也许有一些填充正在进行。您可以为此使用 objdump。
  4. 转储汇编代码(-S 开关)并检查它是否在一种情况下实际生成 ARM 指令,在另一种情况下生成 Thumb。
于 2010-11-05T16:15:58.283 回答
0

对于某些编译器,thumb 是为 ARMv7 编译时的默认设置。您确定您的原始可执行文件不是为拇指构建的吗?

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

于 2010-11-05T15:46:46.477 回答