0

我想在我的 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 字节

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

当然我有“java.lang.UnsatisfiedLinkError”

为什么文件被截断?

4

1 回答 1

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 关闭这些库的剥离。

于 2013-08-29T11:01:35.213 回答