linux下x264库ARM交叉编译

linux下x264库ARM交叉编译

linux下x264库ARM交叉编译

一、准备工作

1、x264库源码下载地址:http://videolan/developers/x264l

作者目前的版本是x264-snapshot-20160511-2245

2、编译器arm-none-Linux-gnueabi-gcc

二、编译步骤

1、解压安装包

tar -xzvf last_x264.tar.bz2

cd x264-snapshot-20160511-2245

2、修改配置文件

./configure --disbale-asm 注意:这里加了--disable-asm选项是因为arm-none-linux-gnuabi工具链是没有汇编器,所以禁止此选项

由于未指定--prefix,所以程序会默认安装/usr/local/bin目录下

3、修改config.mak

主要是将相关选项修改为arm-none-linux-gnuabi相关的配置,修改内容如下:

SYS_ARCH=ARM

CC=arm-none-linux-gnueabi-gcc

CFLAGS=-Wno-maybe-uninitialized -Wshadow -O3 -ffast-math -Wall -I. -I$(SRCPATH) -std=gnu99 -D_GNU_SOURCE -fomit-frame-pointer -fno-tree-vectorize

LD=arm-none-linux-gnueabi-gcc -o

4、make

5、make install

我的本意是想生成lib264.a静态库的,很奇怪,在x264-snapshot-20160511-2245目录下可以找到lib264.a和lib264.so及相关的头文件,但是没有在/usr/lib/local目录下找到libx264.a,但是有x264。

有点不太理解,而且很多过程基本上按照的网上提供的方式参考操作的,很纳闷哪里出

Arm linux交叉编译

1、编译C++程序,链接是需要添加 -lstdc++ g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。对于C++ 程序,编译的时候用gcc 或者g++ 都可以。但是在进行连接的时候最好用g++,因为用g++ 会自动进行C++ 标准库的连接;用gcc 连接C++ 程序也可以,但是需要人为指定连接C++ 标准库,否则就会出现 undefined reference to `__gxx_personality_v/0' 之类的错误。可见-lstdc++ 所对应的是标准C++库。 2、linux OpenCV 静态链接错误,链接是需要添加–ldl undefined reference to `dlopen' undefined reference to `dlerror' undefined reference to `dlsym' 对dlopen, dlerror, dlsym 未定义的引用,缺少链接库,链接时加上选项-ldl 3、对icvPuts, icvGets, gzputs, gzgets, gzopen, gzclose 未定义的引用,编译错误如下 ./obj/local/armeabi-v7a/libopencv_core.a(persistence.cpp.o): In function `icvPuts(CvFileStorage*, char const*)':persistence.cpp:(.text._ZL7icvPutsP13CvFileStoragePKc+0x20): undefined reference to `gzputs'./obj/local/armeabi-v7a/libopencv_core.a(persistence.cpp.o): In function `icvGets(CvFileStorage*, char*, int)':persistence.cpp:(.text._ZL7icvGetsP13CvFileStoragePci+0x26): undefined reference to `gzgets'./obj/local/armeabi-v7a/libopencv_core.a(persistence.cpp.o): In function 缺少zlib库引起的,编译链接时加上-lz 4、如何在configure时,将编译参数传入,改变默认的编译器gcc成arm-linux编译器 按照INSTALL中的介绍,也是常用的方法,在configure的时候,加上–host=arm-linux,结果没有实现我们要的效果,没有将编译器从默认的gcc改成arm-linux-gcc,编译器还是用的默认的gcc。 参数传递必须像CFLAGS=-O2 ./configure一样,将参数设置放在configure的前面: CC=arm-linux-gcc ./configure才能识别的。(如果CC参数放在configure后面:./configure CC=arm-linux-gcc 则不能识别。) –prefix=/usr/crifan/lrzsz,表示具体安装到哪里 完整的配置: CFLAGS=-O2 CC=arm-linux-gcc ./configure–cache-file=cache_file_0 –prefix=/usr/crifan/lrzsz 5、zlib的交叉编译 交叉编译zlib-1.2.3.tar.bz2:

Ubuntu8.04下的ARM交叉编译工具链(arm-linux-)详细介绍.

原文链接与:https://www.360docs.net/doc/0d8019191.html,/u1/58901/showart_1335004.html 实验室的机器配置太低,速度太慢实在是受不了。说是已经升级了,内存从128M升级到了256M。My god!这年头还能到什么地方找那么多128的内存条去阿?哇嘎嘎。真是服了。。。哈哈 打开一个pdf文件要等老半天。基本上没有办法工作。于是想在自己的笔记本上做一个交叉编译环境。我的机器配置也不高,但是相对于实验室的机器来说已经相当不错了。我的机器是单操作系统:只有Ubuntu8.0.4。感觉和windows XP差不多。XP下有的东西,ubuntu下基本上也有。 ps:昨天是我的生日。昨天上午有课,一下午还有今天上午就是在交叉编译的过程中度过的。感觉整个过程挺考验耐心的。下面进入正题。 待续。。。最近两天内补充完整。 ************************************************************************************* 在进行嵌入式在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。本文结合自己做嵌入式交叉编译开发工作的经验,同时结合自己的体会,做了一个介绍 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。 在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由binutils、gcc 和glibc 几个部分组成。有时出于减小libc 库大小的考虑,你也可以用别的c 库来代替glibc,例如uClibc、

交叉编译几种常见的报错

交叉编译几种常见的报错 由于是第一次交叉编译,不知道会出现什么问题,思路就是先把gcc和ld都改成arm的,然后遇到什么问题在解决什么问题,以下过程都是在这个思路下进行。 1.指定arm的编译器和连接器: 只是把gcc改为arm-none-linux-gnueabi-gcc,ld改为arm-none-linux-gnueabi-ld,其他的都没有 修改。出现以下错误: arm-none-linux-gnueabi-ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.so when searching for -lfreetype arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.a when searching for -lfreetype arm-none-linux-gnueabi-ld: cannot find -lfreetype 分析原因是:链接的这些库文件都是在PC编译器下编译出来的,现在把它们和用arm-none-linux-gnueabi-gcc编译出来的文件做链接,当然会出错。 解决方法:这些库重新用arm-gcc重新编译生成相应的库。 下面使用是重新编译库文件的过程: 重新编译freetype 根据交叉编译的文档,我创建了一个文件夹/usr/local/arm-linux来存放编译后的库文件。执行: ./configure –host=arm-none-linux-gnueabi –prefix=/usr/local/arm-linux 注意:host的参数应该是交叉编译环境的前缀。 另外,freetype自动生成的include文件夹有点小问题,编译完成后的include目录结构是 /include/ft2build.h和 /include/freetype2/freetype/***.h如果直接使用会出现头文件找不到的问题,这里涉及到freetype 的一个小技巧:使用freetype时只需要包含ft2build.h这一个头文件即可,因为ft2build.h里面会自动包含其他需要的头文件。而ft2build.h中的包含其他头文件的路径是/freetype/***.h,显然找不到相应的头文件。我们把freetype2中的freetype文件整个拷贝到include目录下,然后把 freetype2删除即可。

了解Linux安装ARM交叉编译器的步骤

了解Linux安装ARM交叉编译器的步骤 安装交叉编译环境 gcc是linux环境下的asm和c语言编译器,生成的是可以在x86平台上运行的可执行程序;而在开发板上运行的程序则需要arm平台专用的编译器,也称为交叉编译器; 交叉编译器可以由开发人员手工定制,也可用使用别人已经编译好的,比如arm-linux-gcc; (1)安装交叉编译器 ---------------------- $>cd /home/zhang/tools/ $>tar xzvf crosstools-451.tar.gz -C /usr/local/ $>cd /usr/local $>ls 可以看到一个子目录toolschain/,该目录下存放了用于arm平台的交叉编译器和其他工具。arm-linux-gcc等可执行程序位于bin子目录下。 (2)环境变量的设置 ---------------------- 如果希望在控制台中直接运行arm-linux-gcc,则必须把arm-linux-gcc所在的路径记录到控制台的默认环境变量PATH中,这需要修改某些配置文件。 如果使用root用户,则可以修改如下文件: $>vim ~/.bashrc 在文件的最后加入以下内容: export PATH=/usr/local/toolschain/4.5.1/bin:$PATH //写入/etc/profile或/etc/bashrc也可 退出vim后,使新的环境变量生效: $>source ~/.bashrc 可以用如下命令验证是否可直接运行交叉编译器: $>which arm-linux-gcc 如显示/usr/local/toolschain/4.5.1/bin/arm-linux-gcc则说明环境变量配置好;

交叉编译环境搭建

交叉编译环境搭建 一、Emdebian介绍 Emdebian vision In the Emdebian vision someone wishing to build a GNU / Linux based device would: 1. Port the linux kernel to their hardware (including writing any specific device drivers). 2. Select the prebuilt emdebian packages needed to support their application. 3. Package their application as Debian package(s) using Debian and Emdebian tools. 4. Build a root filesystem using Emdebian tools from the steps above. Emdebian is involved in steps 2,3,4 above (there are far too many embedded device hardware variations to make prebuilt kernels practical). Thus EmDebian is a binary distribution for embedded devices (whereas most of the other contenders in this space are source distributions [of course being Debian and open source the source code is still available if required]. What emdebian does In short, what EmDebian does is wrap around the regular debian package building tools to provide a more fine grained control over package selection, size, dependencies and content to enable creation of very small and efficient debian packages for use on naturally resource limited embedded targets. 二、搭建GCC编译开发环境 安装G++/GCC编译环境 sudo apt-get install gcc g++ make gdb

制作arm-linux交叉编译工具ForXscaleBig-Endian.

制作arm-linux交叉编译工具 ForXscaleBig-Endian 制作arm-linux交叉编译工具ForXscaleBig-Endian 类别:消费电子 HOWTO build arm-linux toolchain for ARM/XSCALE---------------------------------------------- These instructions document how to build an arm-linux tool chainthat contains big-endian target libraries. 1. Packages used: binutils-2.14.tar.gzgcc- 3.3.2.tar.gzglibc-2.2.5.tar.gzglibc-linuxthreads-2.2.5.tar.gz 2. binutils-2.14 tar xvzf binutils-2.1 4.tar.gzcd binutils-2.14mkdir xscale_linux_becd xscale_linux_be../configure --target=armbe-linux --prefix=/opt/xscale_linux_be --with-lib- path=/opt/xscale_linux_be/armbe-linux/lib --program- prefix=xscale_linux_be- makemake installchmod 777 /opt/xscale_linux_be 3. gcc-3.3.2 -- bootstrap gcc tar xvzf gcc- 3.3.2.tar.gzcd gcc-3.3.2cp $(ATTACHED t-linux file) gcc/config/arm/perl -pi -e 's/GCC_FOR_TARGET = \$\$r\/gcc\/xgcc /GCC_FOR_TARGET = \$\$r\/gcc\/xgcc -mbig-endian /g' Makefile.incd gccperl -pi -e 's/GCC_FOR_TARGET = \.\/xgcc /GCC_FOR_TARGET = \.\/xgcc -mbig-endian /g' Makefile.incd config/armperl -pi -e 's/^# MULTILIB_OPTIONS = mlittle-endian\/mbig-endian/MULTILIB_OPTIONS += mlittle-endian\/mbig-endian/' t-arm-elfperl -pi -e 's/^# MULTILIB_DIRNAMES = le be/MULTILIB_DIRNAMES += le be/' t-arm-elfperl -pi -e 's/^# MULTILIB_MATCHES = mbig-endian=mbe mlittle- endian=ml/MULTILIB_MATCHES += mbig-endian=mbe mlittle-endian=ml/' t-arm-elf export PATH=/opt/xscale_linux_be/bin:/opt/xscale_linux_be/armbe- linux/include:$PATH mkdir xscale_linux_becd xscale_linux_be../configure --program-prefix=xscale_linux_be- --prefix=/opt/xscale_linux_be --target=armbe-linux --disable-shared --disable-threads --with- headers=/home/john_ho/ixp422/src/snapgear/linux-2.4.x/include --with-gnu-as --with-gnu-ld --enable-multilib --enable-languages=cperl -pi -e 's/^program_transform_cross_name = s \^ \$\(target-alias\)- /program_transform_cross_name = s \^ xscale_linux_be- /g' gcc/Makefilemakemake install 4. glibc-2.2.5 (big-endian) tar xvzf glibc-2.2.5.tar.gzcd glibc-2.2.5tar xvzf glibc-linuxthreads- 2.2.5.tar.gz perl -pi -e

ubuntu10.04安装交叉编译器arm-linux-gcc-4.3.2

这次安装交叉编译器没费什么劲。 1.先将arm-linux-gcc-4.3. 2.tgz的安装包复制到ubuntu10.04任意目录中。用直接在root用户下tar -zxvf arm-linux-gcc- 4. 3.2.tgz 解压到当前目录下。 2.安装标准C开发环境,apt-get install build-essential libncurses5-dev 3.添加环境变量 gedit ~/.profile。在这个文件最后添加上自己的环境变量:export PATH=$PATH:/home/usr/local/arm/ 4.3.2/bin 4.然后在终端执行source ~/.profile ,即可立即生效 5.执行 arm-linux-gcc -v 查看编译器版本 Using built-in specs. Target: arm-none-linux-gnueabi Configured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl=https://https://www.360docs.net/doc/0d8019191.html,/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-lin

嵌入式基础:ARM下GCC交叉编译器的制作

嵌入式基础:ARM下GCC交叉编译器的制作 1.下载所需文件以下是我在Cygwin环境下制作arm-gcc(uclibc)交叉编译器中所需要的文件:binutils- 2.14.90.0.8 uClibc-0.9.27gcc- 3. 4.2linux-libc-headers-2.4.29PS:一般来说这里还需要下一些patch,因为我对编译器的理解还不够,加上这个事情是工作内容,还有些其他的特殊需求,为了省麻烦,我用了一个很龌龊的方法。我将在linux环境下被buildroot打过补丁的源代码复制出来。注:通常制作交叉编译器的时候,源代码的版本是非常重要的。2.准备工作${PREFIX}为安装目录;${TARGET}为目标的体系结构,例如arm-linux;将${PREFIX}/${TARGET}下的sys-include 链接到../include目录;将${PREFIX}/${TARGET}下的lib链接到../lib目录;将内核头文件中对应的asm(例如asm-arm)和linux目录复制到${PREFIX}/include下;修改内核头文件,比如在制作i386-arm交叉编译器时,需要在asm目录下的建立arch,proc对应的目录;修改环境变量export PATH=${PREFIX}/bin:${PATH}这个一定要记得,因为制作gcc交叉编译器时,需要用到此bin目录下的交叉二进制工具;接下来这步,是为uclibc库所做的,创建${PREFIX}/usr目录,将目录中的lib链接到../lib,将目录中的include链接到../include;接下来就准备开始制作交叉编译器了,制作交叉编译器一般分四步:制作交叉的二进制工具制作不带库的gcc交叉编译器用制作好的gcc交叉编译器将所需要的库编译重新编译带库的gcc交叉编译器以下是制作交叉编译器的步骤,因为我用的源代码是给buildroot打过补丁的,所以制作的参数会和通常的交叉编译器制作的参数有些不同。3.制作binutils制作交叉环境的二进制工具:../binutils- 2.14.90.0.8/configure--prefix=/staging_dir--target=arm-linux-uclibc--disable-nls--enable-multilib--disable-werror make make install4.制作gcc交叉编译器../gcc-3.4.2/configure--prefix=/staging_dir--target=arm-linux-uclibc--enable-languages=c--disable-shared--with-sysroot=/sour-uc/uClibc_dev/--disable-__cxa_atexit--enable-target-optspace--with-gnu-ld--disable-nls--enable-multilib make make install注:如果是通常的制作,这里一般需要--without-headers--disable-shared--disable-threads,如果不是使用glibc库,还需要--with-newlib。5.编译uclibc库make menuconfig make CROSS=arm-linux-uclibc-make PREFIX="/staging_dir"install注:在menuconfig配置中,Library Installation Options的参数设置如下:(/lib)Shared library loader path(/)uClibc runtime library directory(/usr/) uClibc development environment directory在/staging_dir/usr目录下会生成include和lib两个目录,这两个目录会生成下一步制作gcc所需要的文件,已经被我们链接到相应的目录里去了。如果之前没有把目录链接到安装目录下的lib和include 中,则下步编译gcc会出现许多错误,比如找不到crt?.o等等。 6.重新制作gcc交叉编译器 ../gcc-3.4.2/configure --prefix=/staging_dir --target=arm-linux-uclibc --enable-languages=c --enable-shared --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld--disable-nls --enable-multilib make make install 如果不出现编译错误,那么恭喜你,你距离成功就仅有一小步了。为什么这么说,因为你的gcc的specs文件可能还需要

交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别

交叉编译器arm-linux-gnueabi 和arm-linux-gnu eabihf 的区别 2017年11月20日17:52:13 dumb_man阅读数:109更多 个人分类:编译 一. 什么是ABI和EABI 1) ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture) 在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口. ABI涵盖了各种细节,如: 数据类型的大小、布局和对齐; 调用约定(控制着函数的参数如何传送以及如何接受返回值),例如,是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数参数;通过栈传递的第一个函数参数是最先push到栈上还是最后; 系统调用的编码和一个应用如何向操作系统进行系统调用; 以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等。 一个完整的ABI,像Intel二进制兼容标准 (iBCS) ,允许支持它的操作系统上的程序不经修改在其他支持此ABI的操作体统上运行。 ABI不同于应用程序接口(API),API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译,ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。 2) EABI: 嵌入式ABI 嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。 开发者使用自己的汇编语言也可以使用EABI作为与兼容的编译器生成的汇编语言的接口。

arm交叉编译器gnueabi、none-eabi、arm-eabi等的区别

arm交叉编译器gnueabi、none-eabi、arm-eabi等的区别 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch –体系架构,如ARM,MIPS vendor –工具链提供商 os –目标操作系统 eabi –嵌入式应用二进制接口(Embedded Application Binary Interface) 根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如 arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。他使用的是newlib这个专用于嵌入式系统的C库。 arm-none-linux-eabi:用于Linux的,使用Glibc 实例 1、arm-none-eabi-gcc (ARM architecture,no vendor,not target an operaTIng system,complies with the ARM EABI)用于编译ARM 架构的裸机系统(包括ARM Linux 的boot、kernel,不适用编译Linux 应用 ApplicaTIon),一般适合ARM7、Cortex-M 和 Cortex-R 内核的芯片使用,所以不支持那些跟操作系统关系密切的函数,比如fork(2),他使用的是newlib 这个专用于嵌入式系统的C库。 2、arm-none-linux-gnueabi-gcc (ARM architecture, no vendor, creates binaries that run on the Linux operaTIng system, and uses the GNU EABI) 主要用于基于ARM架构的Linux系统,可用于编译ARM 架构的u-boot、Linux内核、linux应用等。arm-none-linux-gnueabi基于GCC,使用Glibc库,经过Codesourcery 公司优化过推出的编译器。arm-none-linux-gnueabi-xxx 交叉编译工具的浮点运算非常优秀。一般ARM9、ARM11、Cortex-A 内核,带有Linux 操作系统的会用到。

ARM-Linux交叉编译步骤

samba 事先安装sudo apt-get install nfs-kernel-server 交叉编译步骤 1、创建目录s3c2440_recover 2、设置网络文件系统的根目录 配置文件/etc/exports 在最后一行添加 s3c2440_recover的绝对路径*(rw,sync,no_root_squash) 重启nfs sudo /etc/init.d/nfs-kernel-server restart 3、arm开发板启动 Bootloader 引导加载程序 Kernel uImage Filesystem Bootloader -》把内核的uImge加载到内存 uImage 加载filesystem =》shell 用户空间 4、编译器 arm-linux-gcc-4.3.2.tar.gz sudo tar zxvf xxx.tar.gz -C / 编译自动会解压到/usr/local/arm 设置编译器脚本(自己创建), 每次打开终端,若要使用arm编译器,则先source一下 arm-compile.sh () #!/bin/bash export PA TH=$PATH:/usr/local/arm/4.3.2/bin ############### 告诉系统编译器的路径(通过在PATH环境变量中添加)修改脚本可执行权限 chmod u+x arm-compile.sh source arm-compile.sh 4、Uboot 编译 分别解压 源码 uboot-1.2-utu2440.tar.bz2 按照uboot编译.txt

5、内核编译 准备工具 修改过的内核源码Linux2.6.24_utu2440.tar.gz 拷贝到crosscompile目录下 解压tar zxvf linux inux2.6.24_utu2440.tar.gz 制作镜像文件工具mkimage 拷贝到/usr/sbin 或者/usr/bin 目录下 参考脚本hw-kernel编译.txt 内核编译时,会根据.config 的配置文件进行文件编译 (即选择哪些模块,卸载哪些模块) Make menuconfig 就是一个图形裁剪的配置工具, 操作结果会自动保存到.config 操作步骤参hw-kernel编译.txt 6 . Busybox 创建yaffs文件系统 准备工具 busybox-1.19.2.tar.bz2 mkyaffsimage 除开uboot、kernel之外的脚本文件 第一个脚本mkroot.sh 是用来创建根目录下的子目录的 6.1 在某个目录下执行./mkroot.sh 这时,会在当前路径下生成rootfs 目录及其子目录 进入rootfs/dev 下创建console null 操作如下: $cd rootfs/dev/ $ su 口令: # mknod -m 600 console c 5 1;mknod -m 666 null c 1 3;exit 退出rootfs目录 cd ../../ 6.2 解压busybox.1.19.2.tar.bz2

Ubuntu下安装ARM交叉编译器

Ubuntu下安装ARM交叉编译器 1、下载文件: 安装包:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz 下载地址https://www.360docs.net/doc/0d8019191.html,/s/1i31c3Kp 2、开始安装(建议大家新建一个文件夹),然后将文件复制到新建的文件夹中 输入命令:sudo tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz 安装完成后,输入ls命令,可以看到一个opt文件夹,如下图

3.修改环境变量,把交叉编译器的路径加入到PATH:利用tab键的补齐功能进入该路径,如下图 输入pwd命令,查看当前路径的绝对路径 /home/cf/ARM/opt/FriendlyARM/toolschain/4.5.1/bin sudo gedit /etc/bash.bashrc

然后输入如下命令:(如下图鼠标选中代码) if [ -d /home/cf/ARM/opt/FriendlyARM/toolschain/4.5.1 ] ; then PATH=/home/cf/ARM/opt/FriendlyARM/toolschain/4.5.1/bin:"${PATH}" fi 然后输入如下命令,更新环境变量(如下图所示) source /etc/bash.bashrc 4、检查是否将路径加入到PATH: 接下来利用命令echo $PATH 查看环境变量是否添加成功,若环境变量中出现了刚才添加的路径就成功了。(如下图)

5、测试是否安装成功 $ arm-linux-gcc -v 输入命令会显示arm-linux-gcc信息和版本.

嵌入式linux中建立交叉编译环境

建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm-linux-gcc 交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。可以使用厂家提供的交叉编译器,只需将交叉编译器解压到根目录下即可(厂家已经做好这步)。 步骤: 设置系统环境变量: 在linux shell终端输入如下命令 export PATH=$PATH:/usr/local/arm/arm-2009q3/bin/ 这样,内核或其他应用程序均可以用arm-none-linux-gnueabi-来指定使用该交叉编译器。 自行编写一个程序测试: 示例helloworld.c: #include int main(void) { printf("hello world\n"); return 0; } 然后在命令行执行如下语句开始编译: $ arm-none-linux-gnueabi-gcc helloworld.c -o helloarm 用file命令查看下生成的helloworld程序的格式: $ file helloarm 如果输出以下信息,说明编译成功。 helloworld: ELF 32-bit LSB executeable, ARM, version 1, dynamically linked (uses shared libs), not stripped 注: 如果使用如下的命令来编译该文件。 ?[root@localhost root]# gcc –o hello helloworld.c ?[root@localhost root]# file hello

在 Fedora 下建立 ARM-Linux 交叉编译环境

在 Fedora 下建立 ARM-Linux 交叉编译环境 这几天忙着在Fedora 7下建立ARM-Linux的交叉编译环境。一开始参考了《构建嵌入式Linux系统》,这是一本很经典的书。上面介绍了建立ARM-Linux 的交叉编译环境的许多知识,建立的原则和方法。我一开始想按照上面的一般方法,建立一个自己的、最新的交叉编译环境。但是,试了才知道这个过程是一个繁琐、耗时的工作。对于没有编译原理知识的我来说,更是耗时又毫无意义。引用《嵌入式设计及Linux驱动程序开发指南——基于ARM9处理器(第2版)》的原话:“在这项工作上浪费时间似乎没有任何意义,我也是这么认为的,”。由于在公司做事,时间不多,最后,我利用crosstool-0.43,自动完成了这项工作。在是否有必要自己建立交叉编译环境的问题上,我建议:如果你是一个学生,建议你认真学习编译原理、Linux和GNU的编译器原理,再一步一步的自己建立交叉编译环境(学生比较有时间,少泡MM,少玩游戏,时间就 挤出来了。好好学习,以后MM来泡你,别人玩你编的游戏。)。如果你是程 序员(不是交叉编译器的开发者),建议不要在这上面浪费时间了,赚钱要紧,把这个作为业余爱好吧! 这次建立交叉编译环境我主要参考的资料是: 1、《构建嵌入式Linux系统》 2、《嵌入式设计及Linux驱动程序开发指南——基于ARM9处理器(第2版)》 3、《ARM Linux 交叉编译工具链制作攻略》 4、《AT91RM9200引导程序的建立--------建立交叉编译工具链》 Host CPU:i686 RAM: 768MB OS: Fedora 7 TARGET CPU :ARM9TDMI OS : Linux-2.6.22.2/2.6.15.4 我在Fedora7下快速、成功地建立ARM-Linux交叉编译环境,是看了《嵌入式设计及Linux驱动程序开发指南——基于ARM9处理器(第2版)》中关于crosstool的介绍。 crosstool是由美国人Dan Kegel(毕业于加(利福尼亚)州工学院)开发的一套可以自动编译不同匹配版本gcc和glibc,并作测试的脚本程序。写这篇文章时的最新版本是0.43。 下载地址https://www.360docs.net/doc/0d8019191.html,/crosstool/crosstool-0.43.tar.gz 在https://www.360docs.net/doc/0d8019191.html,/crosstool/crosstool-0.43/buildlogs/可以看到各种CPU和GCC+Glibc版本那些已经编译成功,那些部分成功,那些彻底失败。如果你不是编译器开发者,就按着上面做吧。 你也可以到https://www.360docs.net/doc/0d8019191.html,/crosstool/#download看看是否有更新的版本。

相关主题
相关文档
最新文档