包括预构建的静态库

Jon*_*rin 5 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)
Run Code Online (Sandbox Code Playgroud)

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

我试图将它包含在我的mainActivity.cpp文件中,但即使mylibrary.h找到了header(),库也没有,我无法创建一个对象,如:

MyLibrary test = MyLibrary();
Run Code Online (Sandbox Code Playgroud)

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

yus*_*ulx 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)
Run Code Online (Sandbox Code Playgroud)

将libMyLibrary.a和mylibrary.h移动到jni/inc/libMyLibrary.a

  • 嘿,你提到"qtcreator".你创建了一个x86库吗?没有胳膊.对于android,你必须建立一个arm库.你必须使用NDK来构建这个静态库,否则会出现兼容性问题 (3认同)