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文件中的位置.
您的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)
| 归档时间: |
|
| 查看次数: |
15021 次 |
| 最近记录: |