我正在运行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
cross工具链的问题,默认情况下它们是armv7a。
如果 仅编译 源文件,则会看到编译器输出正确的目标文件类型。
$ arm-linux-gnueabi-g ++-4.4 -mcpu = arm9tdmi -march = armv4t -O -c
main.cpp -o CPPTest
$ 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-none-linux-gnueabi-g++编译此代码时,系统调用将被跳过,除了系统(“echo nikhil”)之外,所有其他指令都将被执行
我正在尝试为Ubuntu安装gnu arm工具链。我首先从CodeSourcery下载了tar。但是,当我进入bin文件夹时,我不能运行任何二进制文件。我尝试了使用。/和不使用,并将其放入路径中,它一直告诉我“command not found”,但文件就在我面前的文件夹中。然后我尝试了sudo apt-get install gcc-arm-linux-gnueabi,但是在它说它已经成功安装之
问题内容: arm-eabi,gnueabi和gnueabi-hf交叉编译器有什么区别?我发现很难选择编译器。是否有用于arm的本地编译器? 问题答案: 我不确定: eabi代表将在裸机手臂内核上运行的代码的编译。 gnueabi代表linux的代码编译 对于gnueabi / gnueabi-hf部分,我在这里找到了答案。 gcc-arm-linux-gnueabi是用于armel体系结构的跨工
写小程序遇到一个问题,就是后端生成小程序码通过接口二进制流获取要在小程序上显示,但我始终显示不出来。 可以确定的是接口返回的码是对的,打印的结果也是二进制文件流,[arrayBufferToBase使用文档]查了很多资料都说是这么用的,但最后一个console。log始终为空,文档上说只是停止维护并没有弃用,我的基础库是3.3.5...试了很多办法有巨佬碰到过嘛感谢(https://develop
问题内容: 这个术语一直出现在我的操作系统说明中,我不确定它是什么/在哪里存储以及如何或为什么使用。 问题答案: Linux中的进程表(例如几乎所有其他操作系统中的进程表)只是计算机RAM中的数据结构。它包含有关OS当前正在处理的进程的信息。 此信息包括有关每个过程的一般信息 进程ID 流程所有者 流程优先级 每个过程的环境变量 父进程 指向进程的可执行机器代码的指针。 进程表中一个非常重要的信息