包括预构建的静态库

时间:2013-09-24 13:30:28

标签: android android-ndk

我创建了一个用于测试的静态C ++库。它只定义了一个类MyLibrary和构造函数MyLibrary::MyLibrary()。我在qtcreator中构建了它,并获得了一个libMyLibrary.a文件,这是一个预构建的静态库。

我想在Android项目中使用此库(使用NDK)。因此,在一个正在运行的NDK测试项目中,我添加了一个名为inc的文件夹,其位置与jni相同,我在其中放置了libMyLibrary.a及其对应的标题mylibrary.h

我的Android.mk如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := MyLibrary
LOCAL_SRC_FILES := ../inc/libMyLibrary.a

include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := helloJNI
LOCAL_SRC_FILES := mainActivity.cpp

LOCAL_C_INCLUDES += inc
LOCAL_STATIC_LIBRARIES := MyLibrary

LOCAL_LDLIBS    := -llog
include $(BUILD_SHARED_LIBRARY)

ndk-build命令编译时没有任何错误。但我的静态库显然没有链接(即它没有出现在obj/local/armeabi/objs中)。

我已尝试将其包含在我的mainActivity.cpp文件中,但即使找到了标题(mylibrary.h),该库也没有,我无法创建对象,如下所示:

MyLibrary test = MyLibrary();

我做错了什么?我已经在StackOverflow上阅读了数十个类似的问题,但我仍然没有得到它。

1 个答案:

答案 0 :(得分:5)

尝试使用它:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := helloJNI
LOCAL_SRC_FILES := mainActivity.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/inc/
LOCAL_LDLIBS    := -llog -L$(LOCAL_PATH)/inc/ -lMyLibrary
include $(BUILD_SHARED_LIBRARY)

移动libMyLibrary.a& mylibrary.h到jni / inc / libMyLibrary.a