交叉编译工具链,交叉编译环境包括哪些工具它的作用是什么
来源:整理 编辑:智能门户 2023-08-19 23:30:21
本文目录一览
1,交叉编译环境包括哪些工具它的作用是什么
首先你要知道一个软件可能需要在多个CPU架构的平台上运行,如ARM架构,X86架构等等。假设你要开发一个软件目标平台是ARM,那么你可以选择在PC上,即X86平台上进行开发,然后使用交叉编译工具把软件编译成ARM架构版本,然后才能在ARM上运行,如果只是用一般的编译工具链,那么只能编译在当前平台上运行。至于编译工具链有哪些,具体要看你的开发平台和目标平台,会对应不同的编译工具。
2,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 。
3,怎样检查linux交叉工具链 安装成功
配置好PATH环境变量(加入你交叉编译工具链的目录),比如你arm交叉工具链,可能名字叫arm-linux-gcc。执行arm-linux-gcc -v,如果看到如上图所示提示版本信息,基本上就算安装成功了吧。GOOD LUCK~1.首先通过执行命令:# arm-linux-gcc -v 可以查看到版本信息; 2.通过查看path环境变量可以看到相关的/usr/bin:/usr/local/bin......模版中,存在你的教程编译链; 如果你的环境是临时搭建或者非临时的。只需在~/.bashrc脚本最后加: export PATH=/usr/local/...:$ 退出文本编辑后还需使其生效: source ~/.bashrc如果交叉编译工具链的路径已经添加到path变量中的话,直接使用... -v即可查看比如我的是arm-linux-gnueabihf-g++那么直接arm-linux-gnueabihf-g++ -v或者是--version就可以得到版本信息了。
4,什么是交叉工具链
交叉编译:我的理解,是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的这篇文章!
5,如何设置arm开发板交叉编译工具链
arm开发板上使用的是嵌入式linux操作系统,没有kde桌面系统程序,而konqueror是kde中的ie浏览器,所以你在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菜单
6,如何制定android交叉编译工具链
经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86 PC机的编译工具,可以让你在PC机上编译出目标平台(例如ARM)可识别的二进制文件。Android平台也提供了这样的交叉编译工具链,就放在Android的NDK开发包的toolchains目录下,因此,我们的Makefile文件中,只需给出相应的编译工具即可。废话就先说到这,直接上例子,我们目标是把下面这个math.c文件编译成一个静态库文件:#include 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工程中和使用了。经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86 pc机的编译工具,可以让你在pc机上编译出目标平台(例如arm)可识别的二进制文件。android平台也提供了这样的交叉编译工具链,就放在android的ndk开发包的toolchains目录下,因此,我们的makefile文件中,只需给出相应的编译工具即可。废话就先说到这,直接上例子,我们目标是把下面这个math.c文件编译成一个静态库文件:#include 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 =
文章TAG:
交叉编译工具链 交叉编译环境包括哪些工具它的作用是什么
大家都在看
-
苹果自动同步怎么关闭,关闭手机应用如何进行
2022-12-30
-
iphone手机自动触摸,手机屏幕跳动可能是因为系统有问题
2022-12-30
-
酷睿 自动降频,为什么要关闭cpu自动降频?答案揭晓!
2023-01-22
-
怎么设置自动换锁屏壁纸,手机锁屏壁纸怎么设置自动更换?
2023-01-23
-
手机很快自动锁屏,手机自动锁屏怎么回事?看视频就ok了!
2023-01-25
-
Flyme6开启自动开关机,魅族6如何发力关机?
2023-02-07
-
笔记本fn键自动使用,如何使用小米笔记本电脑进行安全配置?
2023-02-09
-
宁波优塑智能科技怎么样,宁波优创是不是做华为的呀谁买过他们的东西啊价格好吗
2023-02-16
-
龙浦智能科技股份怎么样,马丁路德机器人公司怎么样
2023-02-16
-
余额宝自动赚钱是怎么回事,理财有讲究!财富自由
2023-02-19
-
智能科技护腰带怎么用,石墨烯护腰带好用吗
2023-02-22
-
北京建筑智能科技怎么样,建筑智能化工程技术以后容易就业吗月薪怎么样
2023-02-23
-
iphone5如何自动导出图图片片,从电脑手机怎么用?
2023-02-28
-
带着外星科技闯都市,现代都市小说 主角无敌 带外星科技的小说
2023-03-06
-
智能电视频繁自动切换,电视机器停电后自动启动一般原因如下
2023-03-15