编译链有多少
1. arm-eabi编译链和arm-none-linux-gnueabi编译链有什么区别及使用对用
链接工具命名:
arch-vendor-(os-)abi
1、arm-none-linux-gnueabi (ARM architecture, no vendor, linux OS, and the gnueabi ABI)
用于编译ARM架构的u-boot、linux内核、linux应用等
2、arm-none-eabi
用于编译ARM架构的裸机系统(包括linux的 boot、kernel)
3、arm-eabi
Android ARM 编译器
2. 如何使用自己的makefile编译android ndk项目
android ndk提供了一套自己的makefile管理方式,要将源码项目移植到android平台,需要按照android的makefile规则编写makefile,还要按android的规则部署源码目录,对一个有自己的makefile管理方法的大型项目来说,只是做一下makefile迁移工作就是一件很麻烦的事。
其实android ndk上的编译说到底也就是交叉编译,只要配置好交叉编译工具链,使用原有的makefile也是可以编译出在android运行的c、c++程序的。
以android-ndk-r4-crystax的ndk版本为例:
编译器路径 android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin
名称前缀 arm-eabi-
头文件目录 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include
库文件目录 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib
你可以试一下上面的配置,如果编译链接都没有问题,可以adb push到android设备上运行看看,什么结果?
有点崩溃,根本运行不起来,你也许想试试看android自带的ndk例子,确实是能够运行的,问题在哪儿呢?
只是正确配置了编译器、头文件、库文件还不够,还需要配置编译、链接的参数,android例子中编译链接的参数是什么呢?你也许想深究一下android的makefile,可是不久你会发现那是更崩溃的事情,里面用了很多的make脚本函数。其实android的makefile是可以把执行的详细命令输出来的,只要make的时候加上V=1即可。可以看到确实带了很多参数
编译参数:
-fpic
-mthumb-interwork
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-Wno-psabi
-march=armv5te
-mtune=xscale
-msoft-float
-mthumb
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-Wa,--noexecstack
-D__ARM_ARCH_5__
-D__ARM_ARCH_5T__
-D__ARM_ARCH_5E__
-D__ARM_ARCH_5TE__
-DANDROID
链接参数:
-nostdlib
-Bdynamic
-Wl,-dynamic-linker,/system/bin/linker
-Wl,--gc-sections
-Wl,-z,noreloc
-Wl,--no-undefined
-Wl,-z,noexecstack
-L$(PLATFORM_LIBRARY_DIRECTORYS)
crtbegin_static.o
crtend_android.o
这其中链接参数中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最关键的,android使用了自己的进程加载器,并且自定义了c运行时的启动结束。难怪先前编译的进程启动不了。
3. AT91SAM9G45使用什么编译链
简答:
1.“编译链”
你说的:编译链
据我所知:是不妥的叫法
正确的叫法是:交叉工具链
也常叫做:交叉编译器
2.关于交叉工具链/交叉编译器
首先,你需要先搞懂,什么是交叉工具链
详见:
交叉编译详解
3.给定一个CPU/MCU/SoC,如何确定其所用的交叉工具链?
主要逻辑是:
确定该CPU/MCU/SoC所用的CPU内核
然后根据对应的CPU内核,去找其对应的,可用的交叉工具链。
针对你这里的:AT91SAM9G45
随便去用google搜了下:
AT91SAM9G45
而找到:
AT91SAM9G45 – ARM926-based eMPU
可知:
是基于ARM926的内核的。
所以:
去找,支持ARM926内核的,交叉工具链,即可。
进一步的,通过:
ARM926 处理器
知道了:
ARM926的内核架构是ARMv5TEJ
所以:
去找,
支持ARMv5的交叉编译器
或者是支持ARMv5TEJ的交叉编译器
也就支持了ARM926
也就支持了你的:AT91SAM9G45
4.在哪里可以得到,下载到所需要的交叉工具链?
关于此问题,之前教程已经解释的足够详细了。
详见:
如何得到交叉编译器
对于你此处的,所需要的:
支持ARM926内核的,交叉工具链
去帮你找找:
找到一些:
找到的支持ARMv5或ARMv5TEJ或ARM926或AT91SAM9G45的交叉编译器
1.这里:
Distcc Cross-Compiling
也有你要的,直接编译好的,你可以直接下载试用的:
(支持了armv5的arm-unknown-linux-gnueabi)
ARMv5tesoft
http://archlinuxarm.org/builder/xtools/x-tools.tar.xz
详解:
专门写帖子:
【问题解答】AT91SAM9G45使用什么编译链?
给你极其详尽的解释:
原理,逻辑,如何找,怎么找,并且给你找了不止一个。
注:这里不能贴地址,自己google搜标题即可。