手工编译一个ndk程序
来源:互联网 发布:rip的udp端口号是 编辑:程序博客网 时间:2024/05/16 06:18
- 一NDK环境配置
- NDK目录结构
- 添加环境变量
- 编译
- 链接
- 运行
- 源文件和编译脚本
- helloc
- makefile
- Applicationmk和Androidmk
- 1 STL支持
- 2 异常支持
- 3 C RTTI支持
- Applicationmk NDK所有模块都支持
- Androidmk 设置当前模块
- 编译器介绍
一、NDK环境配置
1.NDK目录结构
2.添加环境变量
新建环境变量
ANDROID_NDK = G:\android-ndk-r12b
在Pathpath环境变量中添加
%ANDROID_NDK% NDK根目录%ANDROID_NDK%\prebuilt\windows-x86_64\bin; make.exe目录
测试环境变量
以上则表示环境变量成功。
3.编译
G:\android-ndk-r12b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gcc-4.9.exe -IG:\android-ndk-r12b\platforms\android-14\arch-arm\usr\include -c hello.c
4.链接
G:\android-ndk-r12b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gcc-4.9.exe -LG:/android-ndk-r12b\platforms\android-14\arch-arm\usr\lib -Bdynamic -lgcc -nostdlib -lc Hello.o -o Hello G:/android-ndk-r12b\platforms\android-14\arch-arm\usr\lib\crtbegin_dynamic.o G:/android-ndk-r12b\platforms\android-14\arch-arm\usr\lib\crtend_android.o
5.运行
adb push Hello /data/local 将文件拷到/data/local目录adb shell chmod 777 /data/local/Hello 修改文件属性adb shell /data/local/Hello //运行程序
6. 源文件和编译脚本
hello.c
#include <stdio.h>int main(){ printf("Hello NDK"); return 0;}
makefile
#文件名称MODALE_NAME=Hello#ndk根目录NDK_ROOT=D:/android-ndk-r12b#编译器根目录TOOLCHAINS_ROOT=$(NDK_ROOT)/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64#编译器目录TOOLCHAINS_PREFIX=$(TOOLCHAINS_ROOT)/bin/arm-linux-androideabi#头文件搜索路径TOOLCHAINS_INCLUDE=$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/4.6/include-fixed#SDK根目录PLATFROM_ROOT=$(NDK_ROOT)/platforms/android-14/arch-arm#sdk头文件搜索路径PLATFROM_INCLUDE=$(PLATFROM_ROOT)/usr/include#sdk库文件搜索路径PLATFROM_LIB=$(PLATFROM_ROOT)/usr/lib#删除RM=del#编译选项FLAGS=-I$(TOOLCHAINS_INCLUDE) \ -I$(PLATFROM_INCLUDE) \ -L$(PLATFROM_LIB) \ -nostdlib \ -lgcc \ -Bdynamic \ -lc #所有obj文件OBJS=$(MODALE_NAME).o \ $(PLATFROM_LIB)/crtbegin_dynamic.o \ $(PLATFROM_LIB)/crtend_android.o #编译器链接all: $(TOOLCHAINS_PREFIX)-gcc $(FLAGS) -c $(MODALE_NAME).c -o $(MODALE_NAME).o $(TOOLCHAINS_PREFIX)-gcc $(FLAGS) $(OBJS) -o $(MODALE_NAME)#删除所有.o文件clean: $(RM) *.o#安装程序到手机install: adb push $(MODALE_NAME) /data/local/tmp adb shell chmod 755 /data/local/tmp/$(MODALE_NAME) adb shell /data/local/tmp/$(MODALE_NAME) #运行程序run: adb shell /data/local/tmp/$(MODALE_NAME)
7. Application.mk
和Android.mk
7.1 STL支持
使用STLport APP_STL := stlport_shared 使用动态库 APP_STL := stlport_static 使用静态库使用GNU STL APP_STL := gnustl_shared 使用动态库 APP_STL := gnustl _static 使用静态库
7.2 异常支持
在Android.mk 设置 LOCAL_CPP_FEATURES += exceptions 设置当前模块 LOCAL_CPPFLAGS += -fexceptions LOCAL_CPP_FEATURES优先级更高 在Application.mk设置 APP_CPPFLAGS += -fexceptions NDK所有模块都支持
7.3 C++ RTTI支持
在Android.mk 设置 LOCAL_CPP_FEATURES += rtti LOCAL_CPPFLAGS += -frtti 在Application.mk设置 APP_CPPFLAGS += -frtti
Application.mk
NDK所有模块都支持
APP_ABI := armeabiAPP_PLATFORM := android-14 APP_STL := stlport_staticAPP_CPPFLAGS += -fexceptions
Android.mk
设置当前模块
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := HelloLOCAL_SRC_FILES := Hello.cppinclude $(BUILD_EXECUTABLE)
8. 编译器介绍
arm-linux-androideabi-addr2line.exe 将程序地址转换为文件名和行号arm-linux-androideabi-ar.exe arm-linux-androideabi-as.exe gas汇编编译器arm-linux-androideabi-c++.exe arm-linux-androideabi-g++.exearm-linux-androideabi-c++filt.exe 连接器使用它,防止重载函数冲突arm-linux-androideabi-cpp.exe c++编译器arm-linux-androideabi-elfedit.exe elf文件编辑器arm-linux-androideabi-g++.exe c++编译器arm-linux-androideabi-gcc-4.6.exe arm-linux-androideabi-gcc.exearm-linux-androideabi-gcc.exe c编译器arm-linux-androideabi-gcov.exe 记录代码的执行路径arm-linux-androideabi-gdb.exe 调试工具arm-linux-androideabi-gprof.exe 程序性能测试工具arm-linux-androideabi-ld.bfd.exearm-linux-androideabi-ld.exe 链接器arm-linux-androideabi-ld.gold.exearm-linux-androideabi-ld.mcld.exearm-linux-androideabi-nm.exe 列出目标文件中的符号arm-linux-androideabi-objcopy.exe 拷贝目标文件的内容到另一个文件arm-linux-androideabi-objdump.exe 列出目标文件的信息arm-linux-androideabi-ranlib.exe 产生归档文件索引arm-linux-androideabi-readelf.exe 显示elf文件信息arm-linux-androideabi-size.exe 显示文件段信息arm-linux-androideabi-strings.exe 显示目标文件可打印的字符串arm-linux-androideabi-strip.exe 去除目标文件的符号信息
阅读全文
0 0
- 手工编译一个ndk程序
- 手工编译NDK程序
- 手工编译Android程序
- 手工编译Android程序
- 手工编译java程序
- 手工编译Android程序
- 手工编译运行java程序
- NDK编译ffmpeg程序
- 一个NDK程序例子
- 手工编译运行J2ME程序的方法
- 手工编译简单的qt程序
- ndk编译c可执行程序
- ndk+eclipse程序基本编译
- NDK编译C可执行程序
- ndk编译c可执行程序(jni 入门)
- ubuntu android交叉编译c程序 ndk
- linux下ndk编译命令行程序
- ndk编译c可执行程序(jni 入门)
- ListView封装
- 低功耗蓝牙cc2541学习笔记之UART-4-协议栈uart接受数据实验
- cad怎样按住鼠标中键拖动图
- python学习笔记(十四)标准库urllib
- codeforces Gym
- 手工编译一个ndk程序
- redux初学笔记
- LeetCode-538 Convert BST to Greater Tree
- Android 5.1 property属性系统分析
- 投影矩阵与最小二乘的背后联系
- 复杂链表的复制
- 83. Remove Duplicates from Sorted List
- 【JS】【个人学习小记】获取并判断浏览器信息
- FZU -- 2282 和 DHU -- 2049 【简单错排 + 组合数学】