把NDK的工具链提取出来单独使用

  • 独立toolchain

把NDK压缩包解压到系统,如/mnt目录下,后在/mnt目录下建立文件夹my_ndk_toolchain,然后再/mnt目录下执行以下命令:
/mnt/android-ndk-r9c/build/tools/make-standalone-toolchain.sh --platform=android-19 --toolchain=arm-linux-androideabi-4.8 --stl=stlport --install-dir=/mnt/my_ndk_toolchain
出现以下打印:
dir=/mnt/my_ndk_toolchain
Copying prebuilt binaries...
Copying sysroot headers and libraries...
Copying libstdc++ headers and libraries...
Copying files to: /mnt/my_ndk_toolchain
Cleaning up...
Done.
说明独立的工具链成功,对执行的命令进行简单说明:
/mnt/android-ndk-r9c/build/tools/make-standalone-toolchain.sh:执行NDK目录下make-standalone-toolchain.sh脚本;
--platform:指工具链将使用哪个版本的Android API,可cd /mnt/android-ndk-r9c/platform中查看,我这里使用的是Android-19;
--toolchain:指独立出来的工具链哪种用途的编译,arm(arm-linux-androideabi-4.8),X86(x86-4.8)或MIPS(mipsel-linux-android-4.8),可cd toolchains中查看并选择适合的类型,我这里使用的是嵌入式;
--stl:指工具链支持C++ stl,stlport代表C++库将静态链接,stlport_shared将动态链接;
--install-dir:指安装目录;
注意:因为我使用的是32-bit Ubuntu,独立工具链默认是32位,所以在参数中没有指定系统类型,如果是64-bit Linux系统,需加入--system=linux-x86_64 或MacOSX加入--system=darwin-x86_64。

  • 测试程序

hello.cpp
#include <iostream>
#include <string>
int main(int argc, char **argv)
{
    std::string str = "hello, ndk! this is my own toolchain! ^-^";
    std::cout << str << std::endl;
    return 0;
}
Makefile
rm=/bin/rm -f
CC=/mnt/my_ndk_toolchain/bin/arm-linux-androideabi-g++
PROGNAME = main
INCLUDES= -I.
CFLAGS  = $(INCLUDES) -g -fPIC -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE
OBJS   = hello.o
LDFLAGS =
all :$(PROGNAME)
%.o: %.cpp
        $(CC) $(CFLAGS) -c -o [email protected] $<
$(PROGNAME) : $(OBJS)
        @echo  "Linking $(PROGNAME)......"
        ${CC} ${LDFLAGS} -o ${PROGNAME} ${OBJS}
        @echo  "Linking Success!"
clean:
        $(rm) *.o  $(PROGNAME)

编译后得到可执行文件:main,adb push到嵌入式Android平台后,./main运行,得到以下结果:
[email protected] :/data # ./main                                                
hello, ndk! this is my own toolchain! ^-^

Generate a customized Android toolchain installation that includes
a working sysroot. The result is something that can more easily be
used as a standalone cross-compiler, e.g. to run configure and
make scripts.

Valid options (defaults are in brackets):

  --help                   Print this help.
  --verbose                Enable verbose mode.
  --dryrun                 Set to dryrun mode.
  --toolchain=<name>       Specify toolchain name
  --use-llvm               Use LLVM.
  --stl=<name>             Specify C++ STL [gnustl]
  --arch=<name>            Specify target architecture
  --abis=<list>            Specify list of target ABIs.
  --ndk-dir=<path>         Take source files from NDK at <path> [.]
  --package-dir=<path>     Place package file in <path> [/tmp/ndk-root]
  --install-dir=<path>     Don‘t create package, install files to <path> instead.
  --platform=<name>        Specify target Android platform/API level. [android-3]

  

时间: 2024-11-10 06:14:13

把NDK的工具链提取出来单独使用的相关文章

使用ndk standalone工具链来编译某个平台下的库

地址: http://www.kandroid.org/ndk/docs/STANDALONE-TOOLCHAIN.html It is now possible to use the toolchain provided with the Android NDK as a standalone compiler. This can be useful if you already have your own build system, and only need to ability to i

Android开发实践:Android交叉编译工具链的使用

前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供了一套封装过的Android交叉编译环境而已,其实,你可以不用它,而直接通过传统的Makefile文件来编译你的c/c++代码的,本文即介绍如何直接通过传统的Makefile文件来编译可用于Android平台的库文件. 经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86

Android NDK 导出独立工具链

传统方式调试 NDK 开发的程序比较麻烦,先要编译成 JNI,又要导出 java接口,还要再写一个 java 工程,改一个地方又要连续改几处,这样效率是很低的.最频繁使用的关键工作路径(编译/调试环节)如果能极致简化,那么可以带来开发效率的成倍提升.其实安卓官方是提供了命令行调试方法的,将你需要调试的 C代码用 NDK直接编译成可执行,然后到设备上执行: 使用 NDK 导出独立工具链,方便以后使用,在 cygwin 下面,将 $NDK 环境变量代表的路径设置好,然后: cd $NDK chmod

arm-none-linux-gnueabi交叉工具链安装 ,介绍,区别总结

1.arm-none-linux-gnueabi-gcc下载 http://www.veryarm.com/arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括裸机程序.u-boot.Linux kernel.filesystem和App应用程序.使用时,按照主机平台,可以下载以下任一版本中的一个

Java工具链(一)--项目管理工具

1.洪荒时代 大神们都在纸上写代码,打孔,代码都以段记, 好几卷厕纸才能表示一段小程序,没管理工具什么事 2.石器时代 汇编,C语言横行的时代,有文件的概念,工具极度匮乏,早慧的程序猿学会了用脚本构建自己编译打包系统,各种shell脚本满天飞 3.古代 出现了make, ant等构建工具,make是基于shell的构建工具,比较原始,模块一多各种相对路径等等满天飞(笔者在前一家公司花一星期干过一个写了18年的c项目的编译环境构建,也从头写过ndk的build系统,都烦得要死), ant感觉比ma

如何在命令行下使用Android NDK交叉编译工具

我们知道,在Linux下可以使用gcc来把一份C代码编译成为Linux上的可执行程序, 如: $ gcc -o main.out main.c 而Android平台提供了NDK工具包来交叉编译可以运行于Android系统中的应用程序, 它需要我们编写 Android.mk来配置编译选项和编译目标, 那么, 能否也像gcc那样直接在命令行下编译呢? 答案是可以的, NDK只不过是把这个过程封装和抽象了而已, 我们完全可以直接调用 NDK 提供的编译工具链来编译我们的C代码, 方法如下所示(在命令行

解读:在命令情况下使用Android NDK交叉编译工具

我们知道,在Linux下可以使用gcc来把一份C代码编译成为Linux上的可执行程序, 如: $ gcc -o main.out main.c 而Android平台提供了NDK工具包来交叉编译可以运行于Android系统中的应用程序,它需要我们编写 Android.mk来配置编译选项和编译目标, 那么, 能否也像gcc那样直接在命令行下编译呢? 答案是可以的, NDK只不过是把这个过程封装和抽象了而已, 我们完全可以直接调用 NDK 提供的编译工具链来编译我们的C代码, 方法如下所示(在命令行界

嵌入式交叉工具链编译

读者可能会有疑问,为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台 (X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统.这种方法在异平台移植和嵌入式开发时非常有用.相对与交叉编译,平常做的编译叫本地编译,也 就是在当前平台编译,编译得到的程序也是在本地执行.用来编译这种跨平台程序的编译器就

【转】Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法

原文网址:http://www.cnblogs.com/muyun/p/3370996.html 一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install gcc-arm-linux-gnueabi 前提是你的Ubuntu系统版本是官网支持的最新的版本,若不是,请升级.执行以上命令即可. 二.使用工具链 注意!这里不能使用 gcc 命令来召唤它.它的名字是 arm-linux-gnueabi-gcc .如果出现 Command Not Found,请关