如何将预构建的共享库链接到 Android NDK 项目?

问题描述:

这里我使用了 jni/ 文件夹中的这个 Android.mk 文件.

Here I used this Android.mk file in jni/ folder.

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Here we give our module name and source file(s)
LOCAL_MODULE    := offlineDownload
LOCAL_SRC_FILES := offline_download.c

LOCAL_SHARED_LIBRARIES :=../lib/libpackext.so.1.0
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

include $(BUILD_SHARED_LIBRARY)

并在项目目录中创建一个 lib 文件夹并将我预构建的 .so 库放在一个 Android.mk 文件中,其中包含以下内容

And make one lib folder in project directory and put my prebuilt .so library and make one Android.mk file which contains following

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := packext
LOCAL_SRC_FILES := libpackext.so.1.0
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include

include $(PREBUILT_SHARED_LIBRARY)

当我使用 ndk-build -B 命令时,我得到了 对 packageExtraction 的未定义引用.在这里,我使用我的预建库函数意味着我无法将我的预建共享库链接到我的 offlinedownload 库.

And when i use ndk-build -B command than i got undefined reference to packageExtraction. Here I use my prebuilt library functions means I can't link my prebuilt shared library to my offlinedownload library.

所以请任何机构帮助我解决这个问题.

So any body please help me to solved out this issue.

这是一个完整的 Android.mk 文件,用于使用 3rd 方共享库.库 (libffmpeg.so) 放在 jni 文件夹中.它的LOCAL_EXPORT_C_INCLUDES"指定了库头文件的保存位置.

Here is a complete Android.mk file for using a 3rd party shared library. The library (libffmpeg.so) is placed in the jni folder. Its "LOCAL_EXPORT_C_INCLUDES" specifies where the header files are kept for the library.

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := libffmpeg.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../ffmpeg/libs/arm-linux-androideabi4.7_1/include
include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)
LOCAL_MODULE    := ffmpegandroid
LOCAL_SRC_FILES := ffmpegandroid.c
LOCAL_SHARED_LIBRARIES := ffmpeg
include $(BUILD_SHARED_LIBRARY)

如果你想支持多种架构,那么你可以指定:

If you wanted to support multiple architectures then you could specify:

APP_ABI := armeabi armeabi-v7a x86 mips

在您的 jni/Application.mk 中并将 LOCAL_SRC_FILES 更改为:

in your jni/Application.mk and change the LOCAL_SRC_FILES to something like:

LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libffmpeg.so

并将 libffmpeg.so 放在 jni/armeabi/libffmpeg.so、jni/armeabi-v7a/libffmpeg.so 等..

and place a libffmpeg.so at jni/armeabi/libffmpeg.so, jni/armeabi-v7a/libffmpeg.so etc ..