我正试图使用Android NDK编译自己的库,但是遇到了一些问题。
这是我的Android.mk文件:
当我使用 "ndk-build" 构建我的项目时,出现了以下错误:
# Define vars for library that will be build statically.
include $(CLEAR_VARS)
LOCAL_MODULE := MyLib
LOCAL_SRC_FILES := ../../../src/mylib/utils/Timer.cpp
LOCAL_C_INCLUDES := ../../../src/mylib/
# Optional compiler flags.
LOCAL_LDLIBS = -lz -lm
LOCAL_LDLIBS := -llog
LOCAL_CPPFLAGS := -std=c++0x
include $(BUILD_SHARED_LIBRARY)
当我使用 "ndk-build" 构建我的项目时,出现了以下错误:
Clean: mylib [armeabi]
Clean: stlport_shared [armeabi]
Clean: stlport_static [armeabi]
Compile++ thumb : mylib <= Timer.cpp
jni/../../../src/mylib/utils/Timer.cpp:1:34: fatal error: mylib/utils/Timer.hpp: No such file or directory
compilation terminated.
为了提供信息,我将像这样包含.hpp文件:
#include <mylib/utils/Timer.hpp>
我不知道为什么头文件找不到,我的库在Xcode和eclipse中工作良好。
感谢您的时间!
编辑:这是我的项目架构,以便理解我的问题:http://i.imgur.com/aiah6zH.jpg。我正在尝试指示Android.mk文件中".hpp"文件所在的位置。
code
LOCAL_C_INCLUDES := ../../../src/code
这行代码没有起作用,我收到了以下错误提示:“不支持的源文件扩展名”。为了使架构更加清晰,我并没有将.cpp和.hpp文件放在同一个文件夹或JNI中,就像SFML等库一样。在我的项目中,我将当前项目包含在头文件搜索路径中,因此我可以在不搜索子文件夹的情况下包含文件,我也可以像这样包含“模块”:#include <Framework/graphic/graphic.hpp>这是我的项目架构:[链接]http://i.imgur.com/ln3ia9F.jpg - GladosLOCAL_C_INCLUDES := ../../../inc
吗?另外,您的 Android.mk 文件在哪里?它是否在 Android/jni 内部?您从哪里运行 ndk-build?您的源代码应该放在 LOCAL_SRC_FILES := ../../../src/source1.cpp ../../../source2.cpp 中。我建议您将外部代码编译为共享或静态库,然后在 Android.mk 文件中添加一个新模块,或者创建一个单独的文件来调用主 Android.mk 中的库,位于 Android/jni/ 目录内。 - Alex BitekAPP_OPTIM := debug APP_PLATFORM := android-14 APP_STL := gnustl_static APP_ABI := armeabi armeabi-v7a
。同时确保您正在使用最新的Android SDK:android-ndk-r8d。请阅读android-ndk-r8d/docs/CPLUSPLUS-SUPPORT.html并检查android-ndk-r8d/samples目录以获取使用NDK的各种示例。 - Alex Bitek