Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation 手臂拇指模式:代码大小未减小_Compilation_Arm_Thumb_Cortex A - Fatal编程技术网

Compilation 手臂拇指模式:代码大小未减小

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 我对命令行又做了一个更改,添加了-

伙计们, 我有一个为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 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构建,看看代码大小是否增加。

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

  • 启用优化。(例如-O3-功能部分-fdata部分)
  • 剥离可执行文件以确保调试信息不被计算在内
  • 检查实际代码(.text)大小,而不是文件大小。也许有一些填充正在进行。您可以使用objdump来实现这一点
  • 转储汇编代码(-S开关),并检查它在一种情况下是否实际生成ARM指令,在另一种情况下是否生成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
    ....
    ....