如何使用自己的makefile编译android ndk项目
来源:互联网 发布:3d max螺丝数据 编辑:程序博客网 时间:2024/04/30 03:20
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,nocopyreloc-Wl,--no-undefined-Wl,-z,noexecstack-L$(PLATFORM_LIBRARY_DIRECTORYS)crtbegin_static.ocrtend_android.o
这其中链接参数中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最关键的,android使用了自己的进程加载器,并且自定义了c运行时的启动结束。难怪先前编译的进程启动不了。
- 如何使用自己的makefile编译android ndk项目
- Android Studio使用NDK编译自己的.so库
- NDK编译后的文件如何加载到Android项目
- NDK编译的文件如何加载到Android项目
- NDK编译的文件如何加载到Android项目
- Android NDK 如何使用自己的共享库
- Android NDK 如何使用自己的共享库
- Android NDK 如何使用自己的共享库
- android ndk编译自己的webkit
- android ndk编译自己的webkit
- Android NDK 用Makefile 编译
- Clion 使用自己编写的 Makefile编译
- codeblocks使用自己的Makefile编译
- NDK编译Android项目
- 手动写Makefile编译Android NDK的so
- 详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)
- Android使用NDK编译时的常用命令
- android ndk jni 项目编译
- LINUX UPTIME命令
- 首次发布App,In-App Purchase 无法submit for review 问题的解决方案
- 基于NLB的 RMS部署!
- C8051F与80C51系列单片机的初始化比较
- Tomcat内存溢出的原因
- 如何使用自己的makefile编译android ndk项目
- SDCC讲师预热专访:淘宝岑文初谈开放平台架构
- POJ1113浅析——Wall ——凸包
- nandflash裸机驱动程序的分析
- sprintf函数的用法(各种类型转换为char*)
- servlet过滤器和监听器
- Ubuntu 12.04 iBus输入法托盘图标无故消失解决办法
- ios 判断当前的设备是那一种型号
- uva 10012 - How Big Is It?