Linux/Mac 交叉编译 Android 程序
来源:互联网 发布:大漠驼铃 php 编辑:程序博客网 时间:2024/05/17 03:26
什么是交叉编译呢
简单地说,就是程序的编译的环境和它的运行的环境不一样。即在一个平台上生成另一个平台上的可执行代码。交叉编译的概念主要和嵌入式开发有关。
为何要有交叉编译
主要是由于目标环境中各种资源都相对有限,所以很难直接进行本地编译。
交叉编译工具链
1. 什么是交叉编译工具链
交叉工具链是指可以生成目标环境可运行代码的工具集。我们知道,在Linux系统中的编译工具链包括以下一些工具, 编译器gcc, 链接器ld, 归档工具ar等等,如果在 Linux 环境中交叉编译 Android 系统环境可运行的代码,是不能直接使用Linux下的编译工具的,而应该使用 Android NDK 里的工具链,它们对应的名子为 arm-linux-android-gcc, arm-linux-android-ld等等。
2. 交叉编译工具的命名规则
arch-[vendor]-kernel-system-toolname。它由五部分组成,下面分别解释一下每部分的含义:
- arch,指的是CPU架构, 一般包括如下几种架构: arm, mips, powerpc, x86, x86_64。
- verdor, 一般指的是生产厂商, 如果没有生产厂商可以为空。
- kernel, 指的目标环境使用的 kernel,以android为例,它使用的是 linux内核,所以在这部分会填写为linux。
- system, 指的是那个系统, 如androideabi, android
- toolname: 指的是 gcc, ld, ar等。
所以我们可以看到 android 的编译工具的名子会写成 arm-linux-andirod-gcc。
3. 交叉编译常用变量说明
在做交叉编译时,我们常会在脚本中定义一些环境变量以方便我们命名用,常用的环境变量如下:
- PREFIX: 指明交叉编译后输出的目录。
- ARCH: 指明交叉编译后输出的CPU架构。
- CROSS-PREFIX:指明交叉编译前辍 arch-vender-kernel-system
- SYSROOT: 指明交叉编译目标机器的头文件和库文件目录
- TOOLCHAIN: 指明交叉编译工具链的位置。
- PLATFROM: 指明交叉编译时使用的是哪个版本的的头文件和库文件。它是 SYSROOT的一部分。
- ANDROID_NDK: 指明 Android NDK 所在目录。
如何进行交叉编译
- 通过设置configure 参数来生成交叉编译的 Makefile 文件
—arch 指定架构
—cross-prefix 交叉编译工具链前辍
—sys root 交叉编译树的根- 例了
以ffmpeg的交叉编译为例,我们可以来看一下如果生成交叉编译的Makefile。./configure –target-os=linux –arch=arm –enable-cross-compile –cross-prefix=arm-linux-androideabi- –sysroot=~Library/Android/sdk/ndk-bundle/platforms/android-9/arch-arm
执行后的结果如下:
install prefix /usr/localsource path .C compiler arm-linux-androideabi-gccC library bionichost C compiler gcchost C library ARCH arm (armv5te)
阅读全文
1 0
- Linux/Mac 交叉编译 Android 程序
- 交叉编译Android系统Linux层应用软件程序并运行
- android交叉编译c程序
- android交叉编译c程序
- 在Linux上交叉编译windows程序
- Mac/Linux编译OpenCV程序
- Mac交叉编译
- ubuntu android交叉编译c程序 ndk
- Golang 在 Mac、Linux、Windows 下如何交叉编译
- Golang 在 Mac、Linux、Windows 下如何交叉编译
- Golang 在 Mac、Linux、Windows 下如何交叉编译
- Golang 在 Mac、Linux、Windows 下如何交叉编译
- arm-marvell-linux-gnueabi 交叉编译c/c++程序,并移植到android
- Android 运行 C/C++程序 (使用 arm-linux-gcc 交叉编译环境)
- Android 运行 C/C++程序 (使用 arm-linux-gcc 交叉编译环境)
- Linux交叉编译(Android-NDK-r5)
- 交叉编译环境学习(编译Android上的可执行程序)
- QT程序交叉编译
- Node JS实现简单网页服务器
- [Sklearn应用5] Feature Selection 特征选择(一) SelectFromModel
- Kotlin-23.内联函数(Inline Functions)
- 微店 Android 插件化实践
- 各种OJ刷题记录6.27-7.6
- Linux/Mac 交叉编译 Android 程序
- 机器学习实战--朴素贝叶斯
- 如何在一个Tomcat下部署两个应用
- eclipse如何设置点击页面找到侧边的目录
- 多线程
- java鬼混笔记:websocket java 多人聊天和一对一聊天
- udp程序设计
- codevs 3117 高精度练习之乘法
- 剑指offer:(30)时间效率 :最小的K个数