① 如何设置arm开发板交叉编译工具链
如何设置arm开发板交叉编译工具链
1.13.6 Compile菜单
按Alt+C可进入Compile菜单, 该菜单有以下几个内容,如图所示:
1. Compile to OBJ:将一个C源文件编译生成.OBJ目标文件, 同时显示生成的文件名。其热键为 Alt+F9。
2. Make EXE file:此命令生成一个.EXE的文件, 并显示生成的.EXE文件名。其中.EXE文件名是下面几项之一:
1) 由Project/Project name说明的项目文件名。
2) 若没有项目文件名, 则由Primary C file说明的源文件。
3) 若以上两项都没有文件名, 则为当前窗口的文件名。
3. Link EXE file:把当前.OBJ文件及库文件连接在一起生成.EXE文件。
4. Build all:重新编译项目里的所有文件, 并进行装配生成.EXE文件。该命令不作过时检查 (上面的几条命令要作过时检查, 即如果目前项目里源文件的日期和时间与目标文件相同或更早, 则拒绝对源文件进行编译)。
5. Primary C file:当在该项中指定了主文件后, 在以后的编译中, 如没有项目文件名则编译此项中规定的主C文件, 如果编译中有错误, 则将此文件调入编辑窗口, 不管目前窗口 中是不是主C文件。
6. Get info:获得有关当前路径、源文件名、源文件字节大小、编译中的错误数目、可用空间等信息,如图:
1.13.7 Project菜单
② 嵌入式linux中,制作交叉编译工具链的问题
看上去总觉得权限设置问题.试下这样执行:
#sudo ./demo-arm-softfloat.sh
③ LINUX交叉编译工具链和GCC是什么关系啊
编译工具链一般最简化的为
binutils
+
gcc
+
glibc
+
kernel-header
组合的环境。
GCC
就是编译器,他的输出每次安装只能有针对一个架构的指令输出。如果要多个架构输出,那就要装多个
GCC
,所以编译工具链里面会有一个
GCC
。
交叉编译就是跨架构编译,编译出来的程序不能在本机执行(当然有例外情况)。所以这个时候就需要交叉编译工具链。
工具链光有
GCC
是不行的,还需要一个
binutils
的二进制连接器,以及一个最基本的目标架构的
C
库,C
库还需要一个目标架构的内核源代码才能完全工作(当然不是必须的,但编译有的时候需要)
又因为
GCC
、binutils
不能实现单软件同时多架构输出,所以需要单独另装,又加上
C
库和内核头文件需要目标架构的东西而不能用本机本地架构的数据。
所以一个交叉编译工具链就是针对目标架构准备的单独安装单独使用的
binutils
+
gcc
+
glibc
+
kernel-header
的集合了。
PS:这个
kernel-header
并不一定就是
Linux
,他还可以是别的系统核心开发库,比如
FreeBSD
。
④ ubuntu怎么安装交叉编译工具链
. 解压 arm-linux-gcc-3.4.1.tar.bz2
#tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下
# cd usr/local/
#cp -rv arm /usr/local/
现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了
3. 修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,强烈推荐使用方法一)
方法一:修改/etc/bash.bashrc文件
#vim /etc/bash.bashrc
在最后加上:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
export PATH
⑤ 在windows上生产linux执行程序的交叉编译工具链叫什么
交叉编译出来的文件在目标机上无法运行大多由两个原因造成: 1 交叉编译工具链与目标机架构不匹配,也就是选错了编译工具; 2 缺少依赖库,这种情况可使用ldd命令查看依赖项,检查一下是否缺少依赖库文件
⑥ 交叉工具链编译过程
android源码有4G,怎么发。我从官网上下载要8个小时。
编译Android系统源码需要以下工具:git工具,repo工具,java sdk,主机编译工具等
我的实验环境是ubuntu 10.10,步骤如下
1.打开终端输入
alex@alex-Linux:~$ sudo -i
root@alex-Linux:~$ apt-get install git-core flex bison gperf libesd0-dev zip
root@alex-Linux:~$ apt-get install libwxgtk2.6-dev zlib1g-dev build-essential libstdc++5
root@alex-Linux:~$ apt-get install tofrodos x-dev libx11-dev libncurses5-dev
root@alex-Linux:~$ apt-get install sun-java5-jdk
如果在上述过程中提示无法找到源,请参阅在源配置中添加ubuntu9.04源
2.编译Android系统源码官方推荐使用Java5.如果本机安装了Java6,应将其配置成java5.需要卸载java6
alex@alex-Linux:~$ apt-get remove sun-java6-jdk
3.配置java环境
root@alex-Linux:/etc/apt# update-alternatives --config java
选择 路径 优先级 状态
------------------------------------------------------------
* 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自动模式
1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java 53 手动模式
2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手动模式
3 /usr/lib/jvm/java-6-sun/jre/bin/java 63 手动模式
选择1
4.Android系统源码在编译过程中需要编译主机工具,所以还需要主机打gcc工具链,而对于编译目标机文件,ANdroid在prebuilt目录中集成了gcc交叉编译工具链。repo是对调用git打封装打工具,安装repo
alex@alex-Linux:~$ sudo -i
root@alex-Linux:~# cd /bin
root@alex-Linux:/bin# curl > ~/bin/repo
如果提示curl未安装,请输入sudo apt-get install curl
设置bin/repo的可执行权限alex@alex-Linux:~/bin$ chmod a+x ~/bin/repo
5.下载Android源码 代码库打路径为android.git.kernel.org 可以通过网页浏览代码库的内容。在用户主目录新建androidsource进入该目录
alex@alex-Linux:~/androidsource$ repo init-u git://android.git.kernel.org/platform/manifast.git
当出现Your Name [xxx]:
Your Email[[email protected]]:时输入相应用户名和Email,经过repo init后,执行repo sync 下载Android系统源文件
时间很长,请耐心等待。
⑦ 如何更改ubuntu中交叉编译工具链
更改ubuntu中交叉编译工具链的操作步骤如下:
1. 下载软件包
从linaro的网站下载预编译二进制包,地址:https://launchpad.net/linaro-toolchain-binaries/trunk/2013.10。
注意选择的版本,要使用linux下的哦。选择这个:gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.bz2
2. 解压
解压gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.xz到 ~/arm-cross-toolchain/目录下
3. 设置环境变量
~$ vi .bashrc
在最后添加如下 2 行:
PATH=$PATH:/home/lxl/arm-cross-toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin
export PATH
请注意,第一行的$PATH后面是英文冒号,而冒号后面是你的cross-toolchain的可执行文件目录(bin目录)的绝对路径。这两句的意思就是将cross-toolchain的可执行文件路径加入系统环境变量PATH中。
4. 使环境变量 生效
~$ source .bashrc
5. 测试
⑧ 如何制定android交叉编译工具链
经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86 PC机的编译工具,可以让你在PC机上编译出目标平台(例如ARM)可识别的二进制文件。Android平台也提供了这样的交叉编译工具链,就放在Android的NDK开发包的toolchains目录下,因此,我们的Makefile文件中,只需给出相应的编译工具即可。
废话就先说到这,直接上例子,我们目标是把下面这个math.c文件编译成一个静态库文件:
#include <stdio.h>
int add( int a , int b ) {
return a+b;
}
你需要编写一个Makefile文件,这里假设你的Android ndk被安装在 /opt/android/ndk 目录下,当然,你可以根据自己的实际情况修改Makefile中相关路径的定义,Makefile文件示例如下:
# Makefile Written by ticktick
# Show how to cross-compile c/c++ code for android platform
.PHONY: clean
NDKROOT=/opt/android/ndk
PLATFORM=$(NDKROOT)/platforms/android-14/arch-arm
CROSS_COMPILE=$(NDKROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-
CC=$(CROSS_COMPILE)gcc
AR=$(CROSS_COMPILE)ar
LD=$(CROSS_COMPILE)ld
CFLAGS = -I$(PWD) -I$(PLATFORM)/usr/include -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp
LDFLAGS =
TARGET = libmath.a
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
all: $(OBJS)
$(AR) -rc $(TARGET) $(OBJS)
clean:
rm -f *.o *.a *.so
这里不讲Makefile文件的基本原理,只说明一下针对Android环境的Makefile文件编写的注意事项。
(1) CROSS_COMPILE
必须正确给出Android NDK编译工具链的路径,当在目录中执行make命令的时候,编译系统会根据 CROSS_COMPILE 前缀寻找对应的编译命令。
(2) -I$(PLATFORM)/usr/include
由于Android平台没有使用传统的c语言库libc,而是自己编写了一套更加高效更适合嵌入式平台的c语言库,所以系统头文件目录不能再使用默认的路径,必须直到Android平台的头文件目录
(3) -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp
这些参数的意义网上基本上都有介绍,我就不一一解释了,并不都是必须添加的,但比较常用。
编译方法:
写好makefile文件,并且保存之后,就可以直接在当前目录下执行make命令,编译完成后,当前目录下会生成 libmath.a ,即可直接拿到Android的jni工程中和使用了。
⑨ 什么是交叉工具链
交叉编译:我的理解,是A机器上编译生成,运行在B机器上。两个机子有不同的机器指令。
工具链:可能指编译、汇编、链接等一整套工具。
下面摘录一段:
DIY自己的GNU交叉工具链(i386-arm)
嵌入式设备由于不具备一定的处理器能力和存储空间,程序开发一般用PC来完成,然后将可执行文件下载到嵌入式系统中运行。这是目前嵌入式程序开发的不二选择——Host/target模式。但这引发了一个问题:由于Host和Target的处理器体系结构不同,我们不能直接用PC上既有的程序开发工具,必须使用跨平台开发工具,即在Host上生成能在Target上运行格式的目标文件。
与在PC上进行程序开发类似,嵌入式系统开发也需要编译器、链接器、解释程序等。本文讨论GNU跨平台开发工具链的建立,包括: ld, gas, ar, gcc, glibc.
自己建立交叉编译环境是一件很头疼的事(处理版本的依赖性, 漫长的编译过程...),如果你不想经历这样的痛苦,可以选择网上编译好了的工具链进行安装.如果你用的是Debian/Ubuntu的发行版, 推荐使用Emdebian. 如果使用uClinux, 也可安装arm-elf-tools.
关于Emdebian和arm-elf-tools的更多介绍, 情看本blog的这篇文章!
⑩ 如何更改ubuntu中交叉编译工具链
1.下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下,我把它下载到了我的个人文件夹里 /home/wrq
2. 解压 arm-linux-gcc-3.4.1.tar.bz2
#tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下
# cd usr/local/
#cp -rv arm /usr/local/
现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了
3. 修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,强烈推荐使用方法一)
方法一:修改/etc/bash.bashrc文件
#vim /etc/bash.bashrc
在最后加上:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
export PATH
方法二:修改/etc/profile文件:
# vim /etc/profile
增加路径设置,在末尾添加如下,保存/etc/profil文件:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
4. 立即使新的环境变量生效,不用重启电脑:
对应方法一:#source /root/.bashrc
对应方法二:# source /etc/profile
5. 检查是否将路径加入到PATH:
# echo $PATH
显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交
叉编译环境安装完成。
6. 测试是否安装成功
# arm-linux-gcc -v
上面的命令会显示arm-linux-gcc信息和版本,显示的信息:
Reading specs from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs Configured with: /work/crosstool-0.27/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=/usr/local/arm/3.4.1 --with-headers=/usr/local/arm/3.4.1/arm
-linux/include --with-local-prefix=/usr/local/arm/3.4.1/arm-linux --disable
-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-
languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.1
7.编译
Hello World程序,测试交叉工具链
写下下面的Hello World程序,保存为
hello.c
#include
int main()
{
printf("Hello World!\n");
return 0;
}
执行下面的命令:
# arm-linux-gcc -o hello hello.c
源程序有错误的话会有提示,没有任何提示的话,就是通过了,就可以下载到ARM目标板上运行了!接着可以输入file hello的命令,查看生成的hello文件的类型,要注意的是生成的可执行文件只能在ARM体系下运行,不能在其于X86的PC机上运行。