NDK 编译静态库 fatal error: xx.h: No such file or directory
来源:互联网 发布:java命令行打包jar 编辑:程序博客网 时间:2024/06/18 07:35
先说下背景吧,有个Android工程用到好几个开源的C++的库,用NDK去做,还是按照普通的NDK的编译方式去编译,android.mk文件里 LOCAL_SRC_FILES 有长长的一条编译时候报错:
arm-linux-androideabi-g++.exe: CreateProcess: No such file or directorymake: *** [/cygdrive/...] Error 1
google了一番说可能是路径过长之类的(还希望大神拍砖纠正真正的原因),我暂时愉快的接收了这个原因,确实是当编译文件达到一定数量后报的这个错,那决定把一些文件通过import的方式以静态库的方式加入到工程中。第一步:将开源库的源文件拷贝到NDK的安装目录\source文件夹下,命名native_app_glue,并编写android.mk文件(与直接在android工程下编译写法差不多),我将完全按照eclipse下工程里的方式编写另一个mk文件(最终引发了一个悲剧,下边会说到)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= native_app_glue
LOCAL_SRC_FILES:= android_native_app_glue.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)
第二步:在android工程中引用这个静态库,android.mk里类似这样:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-activity
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,native_app_glue)
标红的两段为导入静态库语句,NDK默认会去“NDK的安装目录\source”文件下找相关的库,当然也可以对路径进行设置,这个大家可以google下。
感觉这样应该可以,然后编译,但是悲剧的是 报错: fatal error: xx.h: No such file or directory我在ndk中引用的静态库的头文件找不到,但是静态库确实能够编译。就郁闷了,然后继续google,发现原来NDK的例子中已经有一个类似的例子,在ndk安装目录\samples\native-activity,运行,一切OK。说明这条路是可以走通,因此仔细比较两份编译文件,后来发现了悲剧源头,开源库mk文件需要修改下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= native_app_glue
LOCAL_SRC_FILES:= android_native_app_glue.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)
将静态库的头文件要搞出来,才能访问的到。
对于LOCAL_EXPORT_C_INCLUDES作用可以看下:http://www.iteye.com/topic/1129016
这是我被虐和修改的过程,刚刚接触,理解和水平有限希望各种拍砖。
- NDK 编译静态库 fatal error: xx.h: No such file or directory
- fatal error C1083: Cannot open include file: '..\XX.h': No such file or directory
- 在编译 squashfs4.2时候fatal error: zlib.h & lzma.h : No such file or directory
- caffe编译:fatal error: pyconfig.h: No such file or directory #include "pyconfig.h"
- fatal error: Python.h: No such file or directory
- fatal error: zlib.h: No such file or directory
- fatal error: png.h: No such file or directory
- fatal error: mysql.h: No such file or directory
- fatal error: linux/limits.h: No such file or directory
- fatal error: Python.h: No such file or directory
- fatal error: cocostudio/CocoStudio.h: No such file or directory
- fatal error: android/native_window.h: No such file or directory
- fatal error: curses.h: No such file or directory
- fatal error: curses.h: No such file or directory
- fatal error: EGL/egl.h: No such file or directory
- fatal error: CCScene.h: No such file or directory
- fatal error: X11/Xlib.h: No such file or directory
- fatal error: Xm/Protocols.h: No such file or directory
- QT文本编码
- hibernate一对一外键单向关联实例
- 让Windows7 cpu占有率100%的分析
- Android的APK源代码在Android系统源代码下的编译方法
- [小说]魔王冢(65)最后一战
- NDK 编译静态库 fatal error: xx.h: No such file or directory
- 纠结
- 有用的十大算法
- STC的keil安装补丁说明
- fwrite与fprintf区别、printf与fprintf区别
- 常用语句
- 【笔记】共享内存
- mybatis解决oracle数据库存储长字符串问题
- struts2源码分析(一)(初始化)