运行构建脚本时,共享库被截断

时间:2013-08-29 08:29:33

标签: android android-ndk libjpeg-turbo

我想在我的android项目中使用libjpeg.so。

我已经预编译了共享库。

在我的项目中构建脚本:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libjpeg

LOCAL_SRC_FILES :=../lib1/libjpeg.so

include $(PREBUILT_SHARED_LIBRARY)

但是我得到了什么。

源文件lib1 / libjpeg.so - 1 290 798字节

但建成后提交 libs / armeabi / libjpeg.so - 247 236字节

我已经分析了这2个文件 - 第二个文件被截断了

当然我有“java.lang.UnsatisfiedLinkError”

为什么文件被截断?

1 个答案:

答案 0 :(得分:1)

问题是NDK构建系统在将所有预建共享库复制到目标文件夹时会将其删除。

如果你真的需要使用libjpeg作为共享库,那么我建议你运行一个后期构建脚本,将原始文件复制到目标文件夹,覆盖被删除的文件。

最好的解决方案是预构建一个libjpeg.a静态库,然后你可以避免像这样剥离:

include $(CLEAR_VARS)
LOCAL_MODULE := libjpeg
LOCAL_SRC_FILES :=../lib1/libjpeg.a
include $(PREBUILT_STATIC_LIBRARY)

...

include $(CLEAR_VARS)    
LOCAL_MODULE    := mylib
LOCAL_SRC_FILES := mylib.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../lib1/include/
LOCAL_WHOLE_STATIC_LIBRARIES := libjpeg
...
include $(BUILD_SHARED_LIBRARY)

注意LOCAL_WHOLE_STATIC_LIBRARIES关闭了这些lib的剥离。