构建Android的交叉编译器、用ndk编译移植

在之前的博文中提到了用arm-none-linux-gnueabi-gcc交叉编译移植程序到Android平台上。也提到了,Android中没有glibc,所以arm-none-linux-gnueabi-gcc编译出来的程序需要在编译时指明连接器,并且将所需要的动态库拷贝到Android机器中。

详见:http://thedevilking.blog.51cto.com/8144260/1364547

所以为了能够更方便的使用交叉编译器移植我们所需要的程序或者库到Android平台上,我们一般采用ndk的编译方式(ndk的下载配置详见Google官方说明:http://developer.android.com/tools/sdk/ndk/index.html)

在移植的过程中,有时我们需要单独使用交叉编译工具(比如程序的依赖库的Makefile是利用configure生成,那么我们需要使用./configure CC=arm-linux-androideabi- 来生成我们所需要的Makefile)

因此,可以利用ndk生成我们需要的交叉编译工具

在ndk的目录下运行:

./build/tools/make-standalone-toolchain.sh --platform=android-15
Auto-config: --toolchain=arm-linux-androideabi-4.6
Copying prebuilt binaries...
Copying sysroot headers and libraries...
Copying libstdc++ headers and libraries...
Creating package file: /tmp/ndk-wwtao/arm-linux-androideabi-4.6.tar.bz2
Cleaning up...
Done.

--platform=android-15 是用来设定Android的API版本,其余的选项可以通过--help来查看。

这样可以得到ndk生成的交叉编译工具链。

在我们利用交叉编译工具移植了一些所需要的库之后就可以移植到Android平台上。通常来说移植过程都是差不多的,修改makefile交叉编译器,添加搜索头文件的位置和链接库的位置。如果遇到了头文件找不到的错误,常见可能性是交叉编译器的include中的头文件相对路径不一样,一般来说Google一下即可解决。

对于编译一个基于某些依赖库的程序,而这些依赖库在Android系统中已经有时,最简便的方法是找到它的头文件(有的头文件交叉便器的include中没有),然后再从Android系统中拷贝出相应的.so文件,用交叉编译器或者ndk-build编译即可。

arm-linux-androideabi-gcc -I[头文件目录] -L[动态库位置] filename.c -o filename

或者编写Android.mk文件,利用ndk-build.

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := client_android
LOCAL_SRC_FILES := client.c
LOCAL_CFLAGS += -I/home/wwtao/Desktop/bluetooth/include/include
LOCAL_LDLIBS += -L/home/wwtao/Desktop/bluetooth/libfrompanda -lbluetooth
include $(BUILD_EXECUTABLE)
#include $(BUILD_STATIC_LIBRARY)
#include $(BUILD_SHARED_LIBRARY)

其中,LOCAL_PATH := $(call my-dir) 设置LOCAL_PATH为当前了路径

include $(CLEAR_VARS)是清空当前的变量

LOCAL_MODULE 是编译后生成的文件名

LOCAL_SRC_FILES 是编译的源文件

LOCAL_CFLAGS 是设置编译时的头文件搜索路径

LOCAL_LDLIBS 是设置编译时搜索动态链接库的路径

include $(BUILD_EXECUTABLE) 是生成可执行文件,如果是BUILD_STATIC_LIBRARY是生成静态库,如果是BUILD_SHARED_LIBRARY。

时间: 2024-07-30 23:30:04

构建Android的交叉编译器、用ndk编译移植的相关文章

使用Android Studio自带的NDK编译JNI

/********************************************************************************** * 使用Android Studio自带的NDK编译JNI * 说明: * 省得自己另外去下载NDK,编译JNI,麻烦. * * 2017-4-30 深圳 龙华民治樟坑村 曾剑锋 ****************************************************************************

linux下交叉编译器制作

目前我用的交叉编译器是TQ2440配套光盘中制作好了的,解压后需要如下配置: 1.对于Fedora系统:修改/etc/profile文件,在其中添加交叉编译器的环境变量的设置. 对于Ubuntu系统,修改/etc/enviroment文件 2.我用的是Fedora系统,修改PATH值,在其后添加上交叉编译器的路径,添加pathmunge /opt/EmbedSky/4.3.3/bin 对于Ubuntu系统,修改PATH="/usr/local/sbin:/usr/local/bin:/usr/s

交叉编译器的名字的命名规则

交叉编译器的名字的命名规则 在折腾嵌入式开发,用到交叉编译器的时候,常常会看到这样的名字: arm-xscale-linux-gnueabi-gcc arm-liunx-gnu-gcc 等等 其中,对应的交叉编译器的前缀为: arm-xscale-linux-gnueabi- arm-liunx-gnu- 而关于这些名字,我之前也是没注意其具体含义,或者说对于其含义也是很模糊的感觉,不是很清楚这些名字是从何而来的. 后来,经过折腾了crosstool-ng后,基本上明白了这些名字,是如何生成的.

全志R11交叉编译器灵活使用

1. 目录结构 Tina 交叉编译器是预先编译好的,目录为: tina/prebuilt/gcc 具体目录结构如下: .├── aarch64 (详见①) │ ├── aarch64-toolchain.txt │ ├── toolchain-sunxi-glibc │ │ ├── LICENSE │ │ ├── README.TOOLCHAIN │ │ ├── toolchain │ │ │ ├── aarch64-openwrt-linux -> aarch64-openwrt-linux-

【转】Android C程序也可自己手动用交叉编译器编译 (

原文网址:http://blog.sina.com.cn/s/blog_533074eb0101ez5q.html Android 编译环境 本身比较复杂,且不像普通的编译环境:只有顶层目录下才有 Makefile 文件,而其他的每个component 都使用统一标准的 Android.mk . Android.mk 文件本身是比较简单的,不过它并不是我们熟悉的Makefile ,而是经过了 Android 自身编译系统的很多处理,因此要真正理清楚其中的联系还比较复杂,不过这种方式的好处在于,编

[Android]Cygwin使用及NDK编译方法

在Windows XP, Cygwin, NDK SDK r5b下成功编译了ffmpeg,下面是完整的编译过程: 一.准备工作 2.下载Cygwin, 请猛击这里 3.下载Android SDK,请猛击这里,Android SDK的网页 4.下载Android NDK SDK r5b, 请猛击这里,NDK SDK的网页 5.下载ffmpeg,可以下载压缩包,也可以git一个snapshot 好了,有必要说明一下Android SDK和Android NDK SDK的区别: Android SDK

[原]如何用Android NDK编译FFmpeg

\我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的NDK编译出来可以在Android下面可以使用的FFmpeg动态链接库呢?写下这篇文章就是学习如何裁剪并且编译出来可以使用的动态库. 一.获取FFmpeg源码: 首先在编译之前,得获取一份FFmpeg的源码,如果你没有git并且也不打算使用,你可以去FFmpeg官网http://ffmpeg.org/

工(程师)欲善其事,必先利其(编译)器——《Android Studio实战——快速、高效地构建Android应用》

Android Studio 是改变Android开发方式的编译器,<Android Studio实战--快速.高效地构建Android应用>是一本教人如何改变Android开发方式的书. 这本书无微不至讲述了如何用Android Studio编写代码,除了理论介绍外还有备忘录实验和货币实验告诉读者Android Studio并不是一个有编译功能的记事本而是带有代码补全.代码生成和设计代码风格等功能的编译器. 一样东西过时了,自然会有新的替代它.除了Android Studio取代eclips

android NDK编译(导入).a文件和编译多个so文件(转)

源:android NDK编译(导入).a文件和编译多个so文件 一.编译一个静态库 libstatic_android.a LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := static_android LOCAL_SRC_FILES := libstatic_android.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MOD