【发布时间】:2013-10-14 12:51:00
【问题描述】:
我的 NDK 项目的 Eclipse 索引器出现问题。那里有很多类似的线程,但似乎没有一个涉及相同的问题来源。我有一个 OpenGL ES 应用程序,我需要将它移植到纯粹用 C 语言编写的 Android,我想作为 NativeActivity 运行,最好没有附加 Java。经过大量重写后,代码使用ndk-build 编译得很好,但是从IDE 中出现了很多错误,例如Type 'GLfloat' could not be resolved。生成了一个 APK,我可以使用 adb 安装它,但我希望能够使用 IDE,尤其是用于调试。
如果我在上下文菜单中为 #include <GLES2/gl2.h> 之类的行选择“打开声明”,则 Eclipse 能够显示该文件,并且我看到 GLfloat 定义在那里,但在将鼠标悬停在任何内容上时我没有得到任何信息该文件,所以我猜索引器只是以某种方式跳过它?不在 Android NDK 目录中的头文件可以很好地编入索引,例如 jni 文件夹和 jni/png 等子文件夹中的头文件。我在C/C++ Build -> Environment 下定义了NDKROOT root,这是一个具有本机功能并使用CDT 视图的项目。
我注意到的一件事是,当我最初设置项目时,我有一个 .cpp 文件,索引器为其提供 Android NDK 信息没有问题,但一旦我将其更改为 .c,错误就开始出现.我的印象是,Android NDK 是为仅支持基本 C++ 的 C 而设计的,但在示例中四处查看,所以我只看到一堆 .cpp 文件,所以我很困惑。我尝试在我的Android.mk 中设置LOCAL_CPP_EXTENSION += .c,但这会导致Eclipse 在构建期间挂起。我没有尝试过的最后一件事是重命名所有文件,以便使用 C++ 编译器编译它们,但我不明白为什么这应该是必要的,而且我有一些第三方库,如源代码中包含的 zlib而不是摆弄。
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
define all-cpp-files-under
$(patsubst ./%, %, \
$(shell cd $(LOCAL_PATH) ; \
find $(1) -name "*.c" -and -not -name ".*") \
)
endef
LOCAL_MODULE := MyProject
LOCAL_SRC_FILES := $(call all-cpp-files-under, .)
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2 -lOpenSLES
LOCAL_STATIC_LIBRARIES := android_native_app_glue
LOCAL_C_INCLUDES += $(LOCAL_PATH)/jansson
LOCAL_C_INCLUDES += $(LOCAL_PATH)/zlib
LOCAL_C_INCLUDES += $(LOCAL_PATH)/png
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
应用程序.mk
APP_PLATFORM := android-9
APP_ABI := all
【问题讨论】:
-
如果你注释掉
APP_ABI := all会发生什么? -
没有发生太多事情。错误仍然存在,并且 Includes 文件夹显示相同的 arm 条目。我也尝试过清理和重新索引。
-
查看我的答案stackoverflow.com/a/22935387/1525238 以获得完整的索引功能。
标签: c eclipse android-ndk adt