Compilation 手臂拇指模式:代码大小未减小
伙计们, 我有一个为ARM Cortex-A8处理器编译的项目。我正在利用GCC来做这件事。目前我的可执行文件的大小是220.1 KB。现在我修改我的makefile并添加标志Compilation 手臂拇指模式:代码大小未减小,compilation,arm,thumb,cortex-a,Compilation,Arm,Thumb,Cortex A,伙计们, 我有一个为ARM Cortex-A8处理器编译的项目。我正在利用GCC来做这件事。目前我的可执行文件的大小是220.1 KB。现在我修改我的makefile并添加标志-mthumb,makefile行看起来有点像这样- gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon 我在所有的makefile中都做了这些更改,并构建了我的项目,但最终得到的可执行文件仍然是220.1KB 我对命令行又做了一个更改,添加了-
-mthumb
,makefile行看起来有点像这样-
gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon
我在所有的makefile中都做了这些更改,并构建了我的项目,但最终得到的可执行文件仍然是220.1KB
我对命令行又做了一个更改,添加了-mthumb interwork选项
gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon
我再一次得到同样大小的可执行文件220.1KB。我在做这件事的时候遗漏了什么吗
我编写了一个小程序,以查找两个数字中最小的一个,并使用以下命令行进行编译
gcc main.c -o main
我得到一个8.5 KB的可执行文件
接下来,我做一个
gcc -mthumb main.c -o main
我仍然得到一个8.5 KB的可执行文件
这里怎么了
我做了一个cat/proc/cpuinfo
,看看我的处理器是否真的支持thumb,我看到它确实得到了支持。
我明白了-
对于某些编译器,在为ARMv7编译时,默认使用thumb。您确定原始可执行文件不是按thumb构建的吗
尝试使用-mno thumb构建,看看代码大小是否增加。如果没有实际的代码,很难说,但我有几个建议
我认为-marm意味着你的手臂没有拇指,试着去掉-marm。Stephen我这么做了,还是220.1KB。没有变化!我想就是这样,演示起来很容易,在一个小文件上用一个小函数尝试-S-mthumb-marm,看看它会生成arm代码,因为-marm是你最后要求它做的事情。然后将其更改为-marm-mthumb,最后使用-mthumb生成thumb代码。因此,让-marm last胜过所有你想做的事情。当有疑问时,使用“gcc-save temps”保存asm文件,或者在反汇编的目标代码上使用“objdump-d”。基于指令宽度,ARM和Thumb之间的差异非常容易识别(ARM总是4字节,Thumb是2字节,Thumb2是2或4字节)。我见过在gcc输出中Thumb
-marm
是-mthumb
的计数器,gcc
使用最后一个选项;这就是为什么德韦尔奇的答案有效。
Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....