使用Android NDK的标头

Gla*_*dos 4 android android-ndk

我正在尝试用Android NDK编译我自己的库但是我遇到了一些问题.

这是我的Android.mk文件:

# 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)
Run Code Online (Sandbox Code Playgroud)

当我用"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.
Run Code Online (Sandbox Code Playgroud)

有关信息,我将包括.hpp:

#include <mylib/utils/Timer.hpp>
Run Code Online (Sandbox Code Playgroud)

我不知道为什么找不到标题,我的库在Xcode和eclipse中工作.谢谢你的时间!

编辑:这是我的项目架构,以了解我的问题:http: //i.imgur.com/aiah6zH.jpg我试图指出我的".hpp"文件在Android.mk文件中的位置.

bit*_*tek 5

您的LOCAL_C_INCLUDES应包含../../../src/../../../inc目录,以供您使用,#include <mylib/utils/Timer.hpp>即:

LOCAL_C_INCLUDES := ../../../src/
Run Code Online (Sandbox Code Playgroud)

为什么不把你的C和C++标题和源文件放在Android项目的jni /目录中,靠近Android.mk文件?

请参阅:#include <filename>和#include"filename"之间有什么区别?

这也是不正确的,因为第二个LOCAL_LDLIBS会覆盖当前模块中的先前LOCAL_LDLIBS指令:

LOCAL_LDLIBS     = -lz -lm
LOCAL_LDLIBS    := -llog  
Run Code Online (Sandbox Code Playgroud)

如果要附加到make指令,请使用:

LOCAL_LDLIBS    := -lz -lm
LOCAL_LDLIBS    += -llog 
Run Code Online (Sandbox Code Playgroud)

要么 LOCAL_LDLIBS := -lz -lm -llog

编辑:如果你从Android/jni目录运行ndk-build,使用下面的Android.mk似乎有效.

LOCAL_PATH := $(call my-dir)

# first lib, which will be built statically
#
include $(CLEAR_VARS)
LOCAL_MODULE     := MyLib
LOCAL_C_INCLUDES := ../../../inc/
LOCAL_SRC_FILES  := ../../../src/mylib/utils/Timer.cpp
include $(BUILD_STATIC_LIBRARY)

# second lib, which will depend on and include the first one
#
include $(CLEAR_VARS)
LOCAL_MODULE    := MyNativeFinalSharedLib
LOCAL_LDLIBS    := -lz -lm -llog  
LOCAL_CPPFLAGS  := -std=c++0x
LOCAL_STATIC_LIBRARIES := MyLib   
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

你也忘了把LOCAL_PATH:=(调用my-dir)放在第一行和其他一些缺失的make指令上.

Android.mk文件必须以LOCAL_PATH变量的定义开头.它用于在开发树中查找源文件.在此示例中,构建系统提供的宏函数"my-dir"用于返回当前目录的路径(即包含Android.mk文件本身的目录).

(来自android-ndk-r8d/docs/ANDROID-MK.html)