我正在做一个加法现实程序。这个项目交给了我,我是cygwin和android编程的新手。我必须使用cygwin来编译我的一个cpp文件。然而,当我在cygwin上进行ndk构建时,会出现以下错误:
$ ndk-build
Android NDK: ERROR:/cygdrive/c/project/jni/Android.mk:QCAR-prebuilt: LOCAL_SRC_FILES points to a missing file
Android NDK: Check that /cygdrive/c/project/jni//../../../build/lib/armeabi/libQCAR.so exists or that its path is correct
/cygdrive/c/android-ndk-r8b/build/core/prebuilt-library.mk:43: *** Android NDK: Aborting . Stop.
这是我的android.mk代码:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := QCAR-prebuilt
LOCAL_SRC_FILES = /../../../build/lib/$(TARGET_ARCH_ABI)/libQCAR.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../build/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ImageTargets
# The TARGET_PLATFORM defines the targetted Android Platform API level
TARGET_PLATFORM := android-5
# This variable determines the OpenGL ES API version to use:
# If set to true, OpenGL ES 1.1 is used, otherwise OpenGL ES 2.0.
USE_OPENGL_ES_1_1 := false
# Set OpenGL ES version-specific settings.
ifeq ($(USE_OPENGL_ES_1_1), true)
OPENGLES_LIB := -lGLESv1_CM
OPENGLES_DEF := -DUSE_OPENGL_ES_1_1
else
OPENGLES_LIB := -lGLESv2
OPENGLES_DEF := -DUSE_OPENGL_ES_2_0
endif
LOCAL_CFLAGS := -Wno-write-strings $(OPENGLES_DEF)
LOCAL_LDLIBS :=
-llog $(OPENGLES_LIB)
LOCAL_SHARED_LIBRARIES := QCAR-prebuilt
LOCAL_SRC_FILES := ImageTargets.cpp SampleUtils.cpp Texture.cpp
LOCAL_ARM_MODE := arm
include $(BUILD_SHARED_LIBRARY)**
我不是编程专家,所以我想要一些指导。
遇到同样的问题,尝试了多种途径,但效果不佳。通过简单地复制Development\Android\vuforia-sdk-Android-2-0-30\samples文件夹中的示例项目,然后通过cygwin执行ndk构建,最终解决了这个问题。希望能有所帮助:-)
显然,默认的Android.mk
假设ImageTargets
文件夹位于../vuforia-sdk-android-x-x-xx/samples/ImageTargets-x-x-x
,但在我下载样本并将其提取到样本目录后,位置如下:../vuforia-sdk-android-x-x-xx/samples/vuforia-sampleapps-android-x-x-xx/ImageTargets-x-x-x
。因此,原来还有一个子目录,这就是构建失败的原因。为了让它发挥作用,我编辑了Android.mk
如下:
LOCAL_SRC_FILES = /../../../build/lib/$(TARGET_ARCH_ABI)/libQCAR.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../build/include
应该改为
LOCAL_SRC_FILES = /../../../../build/lib/$(TARGET_ARCH_ABI)/libQCAR.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../../build/include
,其中/..
的附加集合负责该附加子文件夹。这个解决方案对我有效。
步骤1:将示例复制到C:\Development\Android\vuforia-sdk-Android-2-0-31\samples
步骤2:打开命令提示符
写入命令1:cd C:\Development\Android\vuforia-sdk-Android-2-0-31\samples\ImageTargets-2-0-7
写入命令2:ndk构建
步骤3:将项目导入eclipses
步骤4:https://developer.vuforia.com/resources/dev-guide/step-3-compiling-running-vuforia-sample-app
因此构建成功。不要忘记在环境变量中设置ndk的路径。
我遇到了类似的问题,我将变量NDK_TOOLCHAIN_VERSION
设置为r9,而它必须是4.8或4.4。我把它改成4.8,它起作用了。
PS:检查丢失的文件是否真的存在会有所帮助。
只是为工作解决方案列表做出贡献,以防上述所有解决方案都不起作用。
在我的情况下,结果发现在我的路径上有一个空间。赛格文不太喜欢小路上的空隙。删除路径中的空格解决了问题。
作为提示,您可能希望将工作目录放在C:projectsMyNativeProject
这样的路径中,将Android SDK和NDK放在没有空格的路径中。
我想添加我的2c,以防它能帮助一些可怜的灵魂。就我而言,ndk不喜欢前面的反斜杠。即从更改
LOCAL_SRC_FILES := /foo/foo.so
至
LOCAL_SRC_FILES := foo/foo.so
解决了我的问题。
使用相对目录路径在Mac上工作:
-LOCAL_SRC_FILES := $(LOCAL_PATH)/lib/$(ARCH_PATH)/lib.so
+LOCAL_SRC_FILES := ./lib/$(ARCH_PATH)/lib.so