5

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

我想在 Android 项目中使用这个库(使用 NDK)。因此,在一个有效的 NDK 测试项目中,我添加了一个名为 的文件夹,incjni在其中放置libMyLibrary.a了它及其对应的 header 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 上阅读了数十个类似的问题,但我仍然不明白。

4

1 回答 1

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

于 2013-09-24T13:44:16.187 回答