Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么arm-linux-gnueabi-g -4.4总是构建一个“7-A”二进制文件?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在运行Ubuntu 12:04LTS并安装了arm- linux-gnueabi C和C编译器.编译的二进制文件不会在我的目标板上运行.看起来即使我指定了cpu和arch,编译器仍会为错误的CPU构建二进制文件.而不是atm9tdmi它构建和7-A. 我做错了什么或者我应该配置什么?谢谢. ~/ArmTest$arm-linux-gnueabi-g++-4.4 -mcpu=arm9tdmi -
我正在运行Ubuntu 12:04LTS并安装了arm- linux-gnueabi C和C编译器.编译的二进制文件不会在我的目标板上运行.看起来即使我指定了cpu和arch,编译器仍会为错误cpu构建二进制文件.而不是atm9tdmi它构建和7-A.

我做错了什么或者我应该配置什么?谢谢.

~/ArmTest$arm-linux-gnueabi-g++-4.4 -mcpu=arm9tdmi -march=armv4t -O main.cpp -o CPPTest

~/ArmTest$readelf -A CPPTest 
Attribute Section: aeabi
File Attributes
  Tag_cpu_name: "7-A"
  Tag_cpu_arch: v7
  Tag_cpu_arch_profile: Application
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-2
  Tag_FP_arch: VFPv3-D16
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte,except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_HardFP_use: SP and DP
  Tag_cpu_unaligned_access: v6
  Tag_DIV_use: Not allowed
~/ArmTest$file CPPTest 
CPPTest: ELF 32-bit LSB executable,ARM,version 1 (SYSV),dynamically linked (uses shared libs),for GNU/Linux 2.6.31,BuildID[sha1]=0xf8e81f7a1bb3ee1200cb3dd1aa5b192ecc6de831,not stripped

 uname -a
Linux Desktop 3.2.0-32-generic-pae #51-Ubuntu SMP Wed Sep 26 21:54:23 UTC 2012 i686 athlon i386 GNU/Linux

:~/ArmTest$arm-linux-gnueabi-g++-4.4 -v
Using built-in specs.
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.7-1ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/4.4.7 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv7-a --with-float=softfp --with-fpu=vfpv3-d16 --with-mode=thumb --disable-werror --enable-checking=release --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include --build=i686-linux-gnu --host=i686-linux-gnu --target=arm-linux-gnueabi --with-headers=/usr/arm-linux-gnueabi/include --with-libs=/usr/arm-linux-gnueabi/lib
Thread model: posix
gcc version 4.4.7 (Ubuntu/Linaro 4.4.7-1ubuntu2) 

:~/ArmTest$cat main.cpp
#include<iostream>

using namespace std;

int main(){
   cout<<"Hello World"<<endl;
return 0;
}

解决方法

您的编译器支持armv4t,问题是您的链接器必须将您的目标文件与libc,crt.o等其他文件链接以创建可执行文件.但是在您的工具链中,所有这些文件都已编译为7-A,因此结果可执行文件最终也是一个.这是ubuntu交叉工具链的一个问题,认情况下它们是armv7a.

如果您只是编译源文件,您将看到编译器输出正确的目标文件类型.

$readelf -A CPPTest
Attribute Section: aeabi
File Attributes
  Tag_cpu_name: "ARM9TDMI"
  Tag_cpu_arch: v4T
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_FP_arch: VFPv3-D16
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte,except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_HardFP_use: SP and DP
  Tag_ABI_optimization_goals: Prefer Speed
  Tag_DIV_use: Not allowed

因此,工具链不仅仅是一个编译器,它的每个组件都需要发挥作用.

大佬总结

以上是大佬教程为你收集整理的为什么arm-linux-gnueabi-g -4.4总是构建一个“7-A”二进制文件?全部内容,希望文章能够帮你解决为什么arm-linux-gnueabi-g -4.4总是构建一个“7-A”二进制文件?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: