Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4510659
  • 博文数量: 356
  • 博客积分: 10458
  • 博客等级: 上将
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-24 14:59
文章分类

全部博文(356)

文章存档

2020年(17)

2019年(9)

2018年(26)

2017年(5)

2016年(11)

2015年(20)

2014年(2)

2013年(17)

2012年(15)

2011年(4)

2010年(7)

2009年(14)

2008年(209)

分类: Android平台

2015-04-15 18:45:05

我从android的源码中提取了getevent.c getevent.h放在一个目录下, 进行jni编译测试
加了个Android.mk内容如下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := GetEvent
LOCAL_SRC_FILES := getevent.c
include $(BUILD_SHARED_LIBRARY)

进入源码目录,手动编译:
ndk-build V=1 2>&1 | tee log.txt
查看log.txt
编译会出现一大堆错误:
/opt/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -MMD -MP -MF ./obj/local/armeabi/objs/GetEvent/getevent.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Ijni -DANDROID  -Wa,--noexecstack -Wformat     -I/opt/android-ndk-r10d/platforms/android-3/arch-arm/usr/include -c  jni/getevent.c -o ./obj/local/armeabi/objs/GetEvent/getevent.o 
In file included from jni/getevent.c:14:0:
jni/getevent.h:12:15: error: 'INPUT_PROP_POINTER' undeclared here (not in a function)
         LABEL(INPUT_PROP_POINTER),
               ^
jni/getevent.h:8:38: note: in definition of macro 'LABEL'
 #define LABEL(constant) { #constant, constant }
                                      ^
jni/getevent.h:13:15: error: 'INPUT_PROP_DIRECT' undeclared here (not in a function)
         LABEL(INPUT_PROP_DIRECT),
               ^
jni/getevent.h:8:38: note: in definition of macro 'LABEL'
 #define LABEL(constant) { #constant, constant }
                                      ^
jni/getevent.h:14:15: error: 'INPUT_PROP_BUTTONPAD' undeclared here (not in a function)
         LABEL(INPUT_PROP_BUTTONPAD),
               ^
jni/getevent.h:8:38: note: in definition of macro 'LABEL'
 #define LABEL(constant) { #constant, constant }
.................................

我用helper2416平台的交叉编译器单独编译getevent.c没有错误,所以问题肯定处在android的编译器上。
仔细查了下发现
/opt/android-ndk-r10d/platforms/android-3 目录下根本没有linux/input.h头文件(getevent.h中需要这个文件头)
反而在/opt/android-ndk-r10d/platforms/android-21下有,所以想来是-I的目录错了。
手动执行编译命令:
/opt/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -MMD -MP -MF ./obj/local/armeabi/objs/GetEvent/getevent.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Ijni -DANDROID  -Wa,--noexecstack -Wformat     -I/opt/android-ndk-r10d/platforms/android-21/arch-arm/usr/include -c  jni/getevent.c -o ./obj/local/armeabi/objs/GetEvent/getevent.o 
编译成功,证实了自己的看法。
解决方法:
源码目录中 加上Application.mk文件
内容为
APP_PLATFORM := android-21
作者:帅得不敢出门    程序员群:31843264
阅读(4269) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~