Android开发基础(2.2)--利用NDK搭建自己的Android交叉工具链

本文介绍了如何在Android开发中构建和使用C/C++的交叉工具链。通过修改Android.mk文件,可以将原本用于生成共享库的项目改为生成可执行文件。文章详细讲解了如何从ndk-build的编译过程中提取工具链信息,包括gcc/g++的位置、参数设置、编译和链接过程,并提供了简化工具链使用的perl脚本agcc。此外,还展示了如何直接使用提取的工具链编译和链接C++代码,生成动态库和可执行程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   上篇提到的都是使用现有的ndk-build建立共享库。如何建立可执行的C/C++文件?将jni/Android.mk内的

include $(BUILD_SHARED_LIBRARY) 改成include $(BUILD_EXECUTABLE) 即可。那么,想“自由使用”工具链,比如 直接使用gcc/g++那样,尤其是想往Android上面移植 C/C++程序或者库时,如何才能跳出ndk-build的限制?

  I.提取Android的gcc工具链

     如果你想偷懒的话,你很幸运,有现成的 ,附件的perl脚本agcc(csdn搞不出附件,只好链接新帖子 ) ,即可以完成工具链的抽取和封装,可以像使用 gcc 那样使用它,它最先来自

plausible.org/andy/agcc

    不过这个是面对整个Android开发包的(包括Android/SDK/NDK的所有文件),而且没有C++/STL支持,我对它进行了修改,使它与上篇给出的ndk-r4配合,完全支持c/c++。

     如果你想自己动手,请这样做:

1.分别对

1)生成可执行文件

2)静态库

3) 动态库

4)多个源文件 的不同类型的工程使用

#ndk-build -B V=1

命令,会让ndk-build “揭露出”整个工具链的不同使用过程 ,比如上篇中的helloworld工程:

显示:

Compile thumb  : helloworld <= /opt/android/android-ndk-r4c/samples/helloworld/jni/helloworld.c
/opt/android/android-ndk-r4c/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc -I/opt/android/android-ndk-r4c/build/platforms/android-8/arch-arm/usr/include -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__  -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64  -I/opt/android/android-ndk-r4c/samples/helloworld/jni -DANDROID  -Wa,--noexecstack -O2 -DNDEBUG -g  -c -MMD -MP -MF /opt/android/android-ndk-r4c/samples/helloworld/bin/ndk/local/armeabi/objs/helloworld/helloworld.o.d /opt/android/android-ndk-r4c/samples/helloworld/jni/helloworld.c -o /opt/android/android-ndk-r4c/samples/helloworld/bin/ndk/local/armeabi/objs/helloworld/helloworld.o
SharedLibrary  : libhelloworld.so
/opt/android/android-ndk-r4c/build/prebuilt/li

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值