4.3.3这个编译器是带EABI的,也就是说具有突出的浮点预算性能,就是Float Point Performance,它使用Vector Float Point(矢量浮点),因此可以极大提高涉及到浮点运算的程序 。而现在手头既有6410又有2410,这个EABI对这两个处理器编译出来的程序有什么不同么?
一、预先了解它会做什么首先我们就先弄清楚它是什么:
arm-linux-gcc --help 提示中有一个值得注意:
-print-libgcc-file-name Display the name of the compiler's companion library
这个告诉我们编译器使用的是哪个库,执行结果如下:从中我们可以知道其使用的是mv4t版本的库,其实在/usr/local/arm/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/目录还有一套其它版本的库,
arm-linux-gcc -print-libgcc-file-name
/usr/local/arm/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/armv4t/libgcc.a
arm-none-linux-gnueabi-gcc -print-libgcc-file-name
/usr/local/arm/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/libgcc.a
执行下面命令可以看到编译器会搜索的目录,从结果可以看到既会搜索mv4t版本也会搜索更高版本的库。
arm-linux-gcc -print-search-dirs
注意:到编译器目录/usr/local/arm/4.3.3/bin/ 我们看一下,发现有如下文件,它们是什么关系?
a. arm-none-linux-gnueabi-gcc-4.3.3
arm-none-linux-gnueabi-gcc-4.3.3 与 arm-none-linux-gnueabi-gcc 的内容完全相同
b. arm-none-linux-gnueabi-gcc
c. arm-none-linux-gnueabi-g++
A. arm-linux-g++
#!/bin/sh
arm-none-linux-gnueabi-g++ -march=armv4t $*
B. arm-linux-gcc 是一个脚本:
#!/bin/sh
arm-none-linux-gnueabi-gcc -march=armv4t $*
C. arm-linux-gcc-4.3.3
#!/bin/sharm-none-linux-gnueabi-gcc-4.3.3 -march=armv4t $*
二、有了基本了解,再了解一下我们的处理器,两个处理器的架构区别:
S3C2410/S3C2440,是ARM920T的核心,架构指令是armv4t
S3C6410 ARM1176JZF-S核心,是armv6架构 :ARM11系列微处理器内核(ARM1156T2-S内核、ARM1156T2F-S内核ARM1176JZ-S内核和ARM11JZF-S内核)
所以如果要编译给6410使用可以改为: -march=armv6 -mcpu=arm1176jzf-s 或者
-march=armv6 -mcpu=arm1176jzf-s -mfloat-abi=softfp -mfpu=vfp $* (使用VFP)
我们可以用arm-linux-gcc --target-help命令查看编译器支持的处理器及架构
三、问题和程序编译:
如果应用程序出现 Illegal instruction 错误不能执行等类似问题,一种原因是我们文件系统的库选错了(或者是mv4t或者是更高版本库),另一种原因就是编译的时候编译成了另外版本的应用程序。也许有其他版本的编译器默认库是高版本库,那么我们需要-march=armv4t 之类参数来指定。或者直接做个arm-linux-gcc脚本:
exec arm-none-linux-gnueabi-gcc -march=armv4t $*
同样可以解决问题,至于将应用程序编译成静态库去解决这个问题,好像是没有这个必要了。
网上有解决编译busybox问题的方法:
-----------------http://www.arm9home.net/simple/index.php?t2986.html
在busybox的Makefile里面
将ARCH ?= $(SUBARCH)
修改为ARCH ?= armv4t
我看好多资料是将其修改为
ARCH ?= arm
这样是不行的
2440内核使用的是arm920t的内核
就是armv4t体系
修改了效果是一样的
-----------------
四、遗留问题,通过执行 arm-linux-gcc –dumpspecs 命令可以看到很多有用的信息,如指定软硬浮点,指定处理器。以及怎么样来制作一个优化的编译器都是值得进一步研究的
来源:http://www.cnblogs.com/leaven/archive/2010/10/11/1848138.html
分享到:
相关推荐
标题中的“arm-linux-gcc-4.3.3(交叉编译链)”指的是一个用于在非ARM架构系统上构建Linux应用程序的工具链。交叉编译是软件开发中的一个重要概念,特别是针对嵌入式系统,因为它允许我们在具有强大硬件资源的主机...
解决arm-linux-gcc4.3.3(友善之臂光盘里的)安装出现command not found的问题
arm-linux-gcc 和 arm-elf-gcc 的主要区别在于使用不同的 C 库文件,arm-linux-gcc 使用 Glibc,而 arm-elf-gcc 使用 uClibc/uC-libc 或者 newlib。开发者可以根据自己的需求选择合适的 GCC 工具链。
第一步:将arm-linux-gcc-4.3.2.bz2拷贝到虚拟机的任意目录 第二步:查看当前系统是否支持arm-linux-gcc 如果不存在 则继续如下步骤: 第三步:在/usr/local创建一个文件夹为arm mkdir /usr/local/arm 第四步:将arm...
编译工具,适用于omap3530_linux等,上传做个备份,想学习的朋友可以下载
要安装`arm-linux-gcc-5.4.0`,首先需要解压下载的文件。使用`tar`命令可以做到这一点: ```bash tar -zxvf arm-linux-gcc-5.4.0.tar.gz ``` 解压后,通常会得到一个含有编译器二进制文件的目录结构。为了能够在...
Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...
本文件为arm-linux-gcc-4.3.2.tgz的part2 arm-linux-gcc-4.3.2.tgz.ab,需要与arm-linux-gcc-4.3.2.tgz的part1 arm-linux-gcc-4.3.2.tgz.aa 合并成一个文件arm-linux-gcc-4.3.2.tgz 安装方法: 0. cat arm-linux-gcc-...
安装ARM-Linux-GCC 5.4.0通常涉及解压`arm-linux-gcc-5.4.0.tar.gz`文件,然后遵循提供的编译和安装指南。在这个过程中,`arm-linux.txt`文件可能是编译和配置过程的说明文档,详细指导如何设置环境变量、配置选项...
Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...
总结来说,`arm-linux-gcc-5.4.0`是一个强大的工具,使得开发者能够在非ARM设备上构建和测试针对ARM Linux系统的应用。它的重要性在于提高了跨平台开发的效率和灵活性,特别是在处理复杂的项目如QT时,新版本的...
1. 将下载的`arm-linux-gcc-4.4.3.tar.gz`文件移动到你的工作目录。 2. 使用`tar -zxvf arm-linux-gcc-4.4.3.tar.gz`命令解压缩文件。 **三、配置编译环境** 1. 进入解压后的目录:`cd arm-linux-gcc-4.4.3` 2. ...
首先,需要下载 arm-linux-gcc 的安装包,例如 arm-linux-gcc-4.3.2.tgz。可以从网上下载,例如从 http://download.csdn.net/detail/xinhuameng/2642452 下载。下载完成后,需要将其解压到指定目录下,例如 /usr/...
标题中的"arm-linux-gcc-4.5.1(安装包及教程)"指的是一个用于在Ubuntu 14.04 64位操作系统上搭建ARM架构Linux系统交叉编译环境的工具包及其配套教程。这个工具包主要是GCC(GNU Compiler Collection)的一个版本,...
可以访问官方或者可信的第三方网站下载该版本的源码压缩包,假设下载的文件名为`arm-linux-gcc-4.3.2.tgz`。 2. **解压arm-linux-gcc-4.3.2源码包** 使用命令行工具解压刚刚下载的文件: ```bash tar xvf arm-...
标题中的"arm-linux-gcc-4.4.3.tar.gz"是一个针对ARM架构Linux系统的交叉编译工具链的压缩包,版本为4.4.3。这个工具链包含了用于构建和编译针对ARM处理器应用程序的GCC(GNU Compiler Collection)和其他必要的库和...
Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...
arm-linux-gcc编译器,32位的4.6.4版本,还有4.6~4.9的版本的arm-linuxgcc编译器在我的资源中可以找到
ARM-Linux-GCC-4.6.4-arm-x86_64交叉编译器是为在基于x86架构的主机上构建针对ARM处理器的Linux应用程序而设计的工具链。这个工具链包括了编译器、链接器、库和其他必要的组件,使得开发者可以在不依赖目标硬件的...
ARM-Linux-GCC-4.5.1是友善之臂提供的一个特定版本的交叉编译器,主要用于在非ARM架构的主机上构建针对ARM架构的Linux应用程序。交叉编译器是一种特殊的编译器,能够在一种处理器平台上生成适用于另一种处理器平台的...