我正在使用Cygwin下的Android NDK r6b(系统已正确更新)。我正在修改hello-jni示例,以学习如何使用NDK。由于我有一个用C++编写的库希望在hello-jni中使用(实际上,我创建了一个名为helloworld的项目,其中包含一个名为ndkfoo.cpp的单个.cpp文件),因此我在Eclipse中创建了一个新的Android项目(针对Android进行了更新),添加了一个jni目录,添加了Android.mk和Application.mk文件,并编辑它们以编译.cpp文件。在编译结束时,我得到一个.so文件。
现在,在helloworld Android.mk中,我需要做一些编辑,以便告诉链接器包括该库。假设库文件是libmylib.so,则我有以下android.mk脚本:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ndkfoo
LOCAL_SRC_FILES := ndkfoo.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/mylib
LOCAL_LDLIBS += -L$(LOCAL_PATH)/../../mylib/libs/armeabi/ -lmylib
include $(BUILD_SHARED_LIBRARY)
我的目录组织方式如下:
d:/android/android-ndk-r6b => android ndk root
d:/android/workspace/helloworld => helloworld project
d:/android/workspace/mylib => mylib project library
因此,libmylib.so的路径为:d:/android/workspace/mylib/libs/armeabi。
不幸的是,这似乎不起作用。如果我从ndkfoo.cpp中删除对mylib的任何引用,它甚至可以在我的手机上编译和运行。如果我不删除对mylib的引用,则会编译但无法链接:我得到以下结果:
D:/android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: 无法找到-lmylib
附言: 我忘了提到我在helloworld项目的jni目录下运行ndk-buld。 补充说明: 我在互联网上找到了很多类似的问题。 我一直使用Visual C / C ++ IDE,所以对GCC,makefile等非常陌生…