我正在尝试构建一个本机应用程序,以便通过hidraw与设备进行通信。
在尝试通过ndk-build构建应用时,我收到以下错误:
jni/daemon.c:15:26: fatal error: linux/hidraw.h: No such file or directory
#include <linux/hidraw.h>
^
compilation terminated.
make: *** [obj/local/armeabi-v7a/objs/hidrawdaemon/daemon.o] Error 1
现在,我检查了其他ABI,我发现所有32位ABI(armeabi-v7a armeabi x86 mips)的构建失败,但所有64位ABI(arm64-v8a x86_64 mips64)成功
我还检查了我的ndk(r10e)包含所有可用平台的hidraw.h:
gps@gps-HP-ProBook-4540s:~/Android/android-ndk-r10e/platforms/android-21$ ls
arch-arm arch-arm64 arch-mips arch-mips64 arch-x86 arch-x86_64
gps@gps-HP-ProBook-4540s:~/Android/android-ndk-r10e/platforms/android-21$ find . -name hidraw*
./arch-x86_64/usr/include/linux/hidraw.h
./arch-arm/usr/include/linux/hidraw.h
./arch-mips/usr/include/linux/hidraw.h
./arch-mips64/usr/include/linux/hidraw.h
./arch-arm64/usr/include/linux/hidraw.h
./arch-x86/usr/include/linux/hidraw.h
gps@gps-HP-ProBook-4540s:~/Android/android-ndk-r10e/platforms/android-21$
任何人都可以指出构建失败的原因,以及如何解决此问题。
答案 0 :(得分:1)
这似乎是您定位的旧版Android而不是21 - 请检查您在APP_PLATFORM
中设置为jni/Application.mk
的内容,或AndroidManifest.xml
中设置的内容}。
它仅在32位平台上失败的原因是,对于64位平台,android-21
是第一个支持它们的版本,所以如果你的目标是在旧版本中,64位部分仍将针对android-21
标头和库构建。 (同样,在android-9
中添加了x86和mips。)
因此,在这种情况下,由于linux/hidraw.h
仅在android-21
后可用,因此请确保将其设置为最低平台版本。