【发布时间】:2012-12-05 10:18:28
【问题描述】:
好吧,我在 stackoverflow 中看到了 4 个类似的问题(this、this、this 和 this)。我尝试了那里给出的答案。我必须说一个答案对我有用,但文档明确说不要使用这种方法。所以我在这里问..
我的项目设置
- 在 Mac OS X Mountain Lion 10.8.2、Eclipse Juno、gcc 4.2.1、GNU Make 上运行 3.8.1.
- 我的项目是一个学习NDK的测试项目,针对API 16, 打算支持 API 8 及更高版本。
- 我的项目位于路径
~/Desktop/PROJECT/ANDROID/WORKSPACE/NDKResearch。 - 我的 NDK 路径是
~/Documents/ANDROID/android_ndk_r8a
我不知道路径信息有什么帮助。但是我总是在 bash 中给出正确的路径时遇到问题。所以就在这里发布吧。
我做了什么?
在我的 NDKResearch 项目中,我添加了一个 Android.mk 文件(路径:$MY_PROJECT_PATH/jni/Android.mk)
include $(CLEAR_VARS)
LOCAL_PATH:= $(call my-dir)
LOCAL_CPP_FEATURES += -fno-exceptions
LOCAL_SRC_FILES := \
Log.c \
Calculate.c
LOCAL_MODULE := libSoundTouch
include $(BUILD_SHARED_LIBRARY)
在$MY_PROJECT_PATH/jni/Application.mk 中添加了Application.mk 文件。
APP_PLATFORM := android-16
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_PROJECT_PATH := /Users/myusername/Desktop/PROJECTS/ANDROID/WORKSPACE/NDKResearch
然后我在 bash shell 中执行了ndk-build
## cd ~/Desktop/PROJECT/ANDROID/WORKSPACE/NDKResearch
## ~/Documents/ANDROID/android_ndk_r8a/ndk-build
只是为了得到标题中提到的错误。
我的问题是什么?
从上面链接的线程中,user sege's answer 确实为我工作。其他人都没有。但是 ndk 的文档明确声明不要使用这种方法。来自 ndk 附带的 Overview.html 文件(找不到在线版本)。
有两种方法可以使用 Application.mk:
把它放在$PROJECT/jni/Application.mk下,它就会被选中 由“ndk-build”脚本自动启动(稍后会详细介绍)
>将它放在$NDK/apps//Application.mk 下,其中$NDK 指向您的 NDK 安装路径。之后,启动 "make APP=" 来自 NDK 目录。
这是在 Android NDK r4 之前使用此文件的方式。 出于兼容性原因,它仍然受支持,但我们强烈 鼓励您改用第一种方法,因为它很多 更简单,不需要修改/更改目录 NDK 安装树。
所以我的问题是,有人用第一种方法成功了吗?它不工作的任何原因?
【问题讨论】:
-
即使您从 Application.mk 中删除 APP_PROJECT_PATH := /Users/myusername/Desktop/PROJECTS/ANDROID/WORKSPACE/NDKResearch 也会遇到问题吗?
-
我注意到的一件事是,您将 gnustl 用于 RTTI 和异常,但您的源文件以 .c 结尾,据我所知,这会导致从 gcc 而不是 g++ 编译。我不知道这是否会导致您收到错误消息,但可能值得将源文件命名为可识别的 cpp 扩展名(尽管 8 存在问题,请参见此处 LOCAL_CPP_EXTENSION)或添加 LOCAL_CPP_EXTENSION := 。 c
标签: java android android-ndk build-error