UnsatisfiedLinkError In Android 4.4 libDevil cannot locate symbol "png_set_longjmp_fn"

 玫瑰花开-内蒙_238 发布于 2023-02-09 04:34

I have an image converter app on google play that runs fine and well, it incorporates NDK for support of more file formats using the DevIL Image Processing library.

It wokrs fine on most devices but since Android 4.4 Kitkat came out, i've received emails and crash reports on Google Play Console especially from Nexus devices that have 4.4 and now other older devices that receive the update

Here is the crash report

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "png_set_longjmp_fn" referenced by "libdevil.so"...
at java.lang.Runtime.loadLibrary(Runtime.java:364)
at java.lang.System.loadLibrary(System.java:526)
at com.paul.icon.MainActivity.(Unknown Source)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)
at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)

The app can't start and from my own debugging it's from the first lines of my MainActivity.java when loading libdevil

static {
        System.loadLibrary("physfs");
        System.loadLibrary("jpeg");
        System.loadLibrary("tiff");
        System.loadLibrary("mng");
        System.loadLibrary("png");
        System.loadLibrary("jasper");
        System.loadLibrary("lcms");
        System.loadLibrary("devil");
        System.loadLibrary("mylib");
    }

saying....

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "png_set_longjmp_fn" referenced by "libdevil.so"...

here is my android.mk file

LOCAL_PATH := $(call my-dir)

PHYSFS_SRC_PATH     := physfs-2.0.2/
TIFF_SRC_PATH       := tiff-3.9.5/
MNG_SRC_PATH        := libmng-1.0.10/
LCMS_SRC_PATH       := lcms2-2.2/
PNG_SRC_PATH        := libpng-1.5.6/
JPEG_SRC_PATH       := jpeg-8c/
JASPER_SRC_PATH     := jasper-1.900.1/
DEVIL_SRC_PATH      := devil-1.7.8/


#libjpeg
include $(CLEAR_VARS)

LOCAL_MODULE    := libjpeg
LOCAL_MODULE_FILENAME := libjpeg

LOCAL_SRC_FILES := \
        ${JPEG_SRC_PATH}jcapimin.c ${JPEG_SRC_PATH}jcapistd.c ${JPEG_SRC_PATH}jccoefct.c ${JPEG_SRC_PATH}jccolor.c ${JPEG_SRC_PATH}jcdctmgr.c ${JPEG_SRC_PATH}jchuff.c \
        ${JPEG_SRC_PATH}jcinit.c ${JPEG_SRC_PATH}jcmainct.c ${JPEG_SRC_PATH}jcmarker.c ${JPEG_SRC_PATH}jcmaster.c ${JPEG_SRC_PATH}jcomapi.c ${JPEG_SRC_PATH}jcparam.c \
        ${JPEG_SRC_PATH}jcprepct.c ${JPEG_SRC_PATH}jcsample.c ${JPEG_SRC_PATH}jctrans.c ${JPEG_SRC_PATH}jdapimin.c ${JPEG_SRC_PATH}jdapistd.c \
        ${JPEG_SRC_PATH}jdatadst.c ${JPEG_SRC_PATH}jdatasrc.c ${JPEG_SRC_PATH}jdcoefct.c ${JPEG_SRC_PATH}jdcolor.c ${JPEG_SRC_PATH}jddctmgr.c ${JPEG_SRC_PATH}jdhuff.c \
        ${JPEG_SRC_PATH}jdinput.c ${JPEG_SRC_PATH}jdmainct.c ${JPEG_SRC_PATH}jdmarker.c ${JPEG_SRC_PATH}jdmaster.c ${JPEG_SRC_PATH}jdmerge.c \
        ${JPEG_SRC_PATH}jdpostct.c ${JPEG_SRC_PATH}jdsample.c ${JPEG_SRC_PATH}jdtrans.c ${JPEG_SRC_PATH}jerror.c ${JPEG_SRC_PATH}jfdctflt.c ${JPEG_SRC_PATH}jfdctfst.c \
        ${JPEG_SRC_PATH}jfdctint.c ${JPEG_SRC_PATH}jidctflt.c ${JPEG_SRC_PATH}jidctfst.c ${JPEG_SRC_PATH}jidctint.c ${JPEG_SRC_PATH}jquant1.c \
        ${JPEG_SRC_PATH}jquant2.c ${JPEG_SRC_PATH}jutils.c ${JPEG_SRC_PATH}jmemmgr.c ${JPEG_SRC_PATH}jcarith.c ${JPEG_SRC_PATH}jdarith.c ${JPEG_SRC_PATH}jaricom.c

# Use the no backing store memory manager provided by
# libjpeg. See install.txt
LOCAL_SRC_FILES += \
        ${JPEG_SRC_PATH}jmemnobs.c

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)

include $(BUILD_STATIC_LIBRARY)

#libtiff
include $(CLEAR_VARS)

LOCAL_MODULE    := libtiff
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}

LOCAL_C_INCLUDES  :=  \
    ${TIFF_SRC_PATH}libtiff/ \
    ${JPEG_SRC_PATH} \

LOCAL_SRC_FILES := \
    ${TIFF_SRC_PATH}libtiff/tif_dir.c \
    ${TIFF_SRC_PATH}libtiff/tif_codec.c \
    ${TIFF_SRC_PATH}libtiff/tif_predict.c \
    ${TIFF_SRC_PATH}libtiff/tif_tile.c \
    ${TIFF_SRC_PATH}libtiff/tif_version.c \
    ${TIFF_SRC_PATH}libtiff/tif_unix.c \
    ${TIFF_SRC_PATH}libtiff/tif_swab.c \
    ${TIFF_SRC_PATH}libtiff/tif_thunder.c \
    ${TIFF_SRC_PATH}libtiff/tif_next.c \
    ${TIFF_SRC_PATH}libtiff/tif_strip.c \
    ${TIFF_SRC_PATH}libtiff/tif_extension.c \
    ${TIFF_SRC_PATH}libtiff/tif_error.c \
    ${TIFF_SRC_PATH}libtiff/tif_dirwrite.c \
    ${TIFF_SRC_PATH}libtiff/tif_fax3sm.c \
    ${TIFF_SRC_PATH}libtiff/tif_ojpeg.c \
    ${TIFF_SRC_PATH}libtiff/tif_flush.c \
    ${TIFF_SRC_PATH}libtiff/tif_warning.c \
    ${TIFF_SRC_PATH}libtiff/tif_fax3.c \
    ${TIFF_SRC_PATH}libtiff/tif_jbig.c \
    ${TIFF_SRC_PATH}libtiff/tif_open.c \
    ${TIFF_SRC_PATH}libtiff/tif_write.c \
    ${TIFF_SRC_PATH}libtiff/tif_packbits.c \
    ${TIFF_SRC_PATH}libtiff/tif_compress.c \
    ${TIFF_SRC_PATH}libtiff/tif_color.c \
    ${TIFF_SRC_PATH}libtiff/tif_print.c \
    ${TIFF_SRC_PATH}libtiff/tif_zip.c \
    ${TIFF_SRC_PATH}libtiff/tif_aux.c \
    ${TIFF_SRC_PATH}libtiff/tif_dumpmode.c \
    ${TIFF_SRC_PATH}libtiff/tif_dirread.c \
    ${TIFF_SRC_PATH}libtiff/tif_getimage.c \
    ${TIFF_SRC_PATH}libtiff/tif_jpeg.c \
    ${TIFF_SRC_PATH}libtiff/tif_close.c \
    ${TIFF_SRC_PATH}libtiff/tif_read.c \
    ${TIFF_SRC_PATH}libtiff/tif_luv.c \
    ${TIFF_SRC_PATH}libtiff/tif_dirinfo.c \
    ${TIFF_SRC_PATH}libtiff/tif_lzw.c \
    ${TIFF_SRC_PATH}libtiff/tif_pixarlog.c \
    ${TIFF_SRC_PATH}port/lfind.c 

LOCAL_LDLIBS    := -llog -L../lib -lGLESv1_CM

LOCAL_STATIC_LIBRARIES := libjpeg libphysfs

include $(BUILD_SHARED_LIBRARY)


#libphysfs
include $(CLEAR_VARS)

LOCAL_MODULE    := libphysfs
LOCAL_CFLAGS    := -g -Dlinux -Dunix -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT \
                    -DPHYSFS_SUPPORTS_APK=1 -DPHYSFS_SUPPORTS_ZIP=1 -DPHYSFS_SUPPORTS_ZIP=1 -DPHYSFS_SUPPORTS_7Z=1 -DPHYSFS_SUPPORTS_GRP=1 -DPHYSFS_SUPPORTS_QPAK=1 -DPHYSFS_SUPPORTS_HOG=1 -DPHYSFS_SUPPORTS_MVL=1 -DPHYSFS_SUPPORTS_WAD=1

LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}

LOCAL_C_INCLUDES  :=  \
    ${PHYSFS_SRC_PATH} 

LOCAL_SRC_FILES := \
    ${PHYSFS_SRC_PATH}/physfs.c \
    ${PHYSFS_SRC_PATH}/physfs_byteorder.c \
    ${PHYSFS_SRC_PATH}/physfs_unicode.c \
    ${PHYSFS_SRC_PATH}/platform/os2.c \
    ${PHYSFS_SRC_PATH}/platform/pocketpc.c \
    ${PHYSFS_SRC_PATH}/platform/posix.c \
    ${PHYSFS_SRC_PATH}/platform/unix.c \
    ${PHYSFS_SRC_PATH}/platform/macosx.c \
    ${PHYSFS_SRC_PATH}/platform/windows.c \
    ${PHYSFS_SRC_PATH}/archivers/dir.c \
    ${PHYSFS_SRC_PATH}/archivers/grp.c \
    ${PHYSFS_SRC_PATH}/archivers/hog.c \
    ${PHYSFS_SRC_PATH}/archivers/lzma.c \
    ${PHYSFS_SRC_PATH}/archivers/mvl.c \
    ${PHYSFS_SRC_PATH}/archivers/qpak.c \
    ${PHYSFS_SRC_PATH}/archivers/wad.c \
    ${PHYSFS_SRC_PATH}/archivers/zip.c \
    ${PHYSFS_SRC_PATH}/archivers/apk.c \
    ${PHYSFS_SRC_PATH}/lzma/C/7zCrc.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Archive/7z/7zBuffer.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Archive/7z/7zDecode.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Archive/7z/7zExtract.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Archive/7z/7zHeader.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Archive/7z/7zIn.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Archive/7z/7zItem.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Archive/7z/7zMethodID.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Compress/Branch/BranchX86.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Compress/Branch/BranchX86_2.c \
    ${PHYSFS_SRC_PATH}/lzma/C/Compress/Lzma/LzmaDecode.c \
    ${PHYSFS_SRC_PATH}/zlib123/adler32.c \
    ${PHYSFS_SRC_PATH}/zlib123/compress.c \
    ${PHYSFS_SRC_PATH}/zlib123/crc32.c \
    ${PHYSFS_SRC_PATH}/zlib123/deflate.c \
    ${PHYSFS_SRC_PATH}/zlib123/gzio.c \
    ${PHYSFS_SRC_PATH}/zlib123/infback.c \
    ${PHYSFS_SRC_PATH}/zlib123/inffast.c \
    ${PHYSFS_SRC_PATH}/zlib123/inflate.c \
    ${PHYSFS_SRC_PATH}/zlib123/inftrees.c \
    ${PHYSFS_SRC_PATH}/zlib123/trees.c \
    ${PHYSFS_SRC_PATH}/zlib123/uncompr.c \
    ${PHYSFS_SRC_PATH}/zlib123/zutil.c \



LOCAL_LDLIBS    := -llog -L../lib -lGLESv1_CM

LOCAL_STATIC_LIBRARIES := 

include $(BUILD_SHARED_LIBRARY)

#libmng
include $(CLEAR_VARS)

LOCAL_MODULE    := libmng
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}

LOCAL_C_INCLUDES  :=  \
    ${JPEG_SRC_PATH} \
    ${MNG_SRC_PATH}

LOCAL_SRC_FILES := \
    ${MNG_SRC_PATH}libmng_write.c \
    ${MNG_SRC_PATH}libmng_object_prc.c \
    ${MNG_SRC_PATH}libmng_display.c \
    ${MNG_SRC_PATH}libmng_chunk_xs.c \
    ${MNG_SRC_PATH}libmng_chunk_io.c \
    ${MNG_SRC_PATH}libmng_read.c \
    ${MNG_SRC_PATH}libmng_prop_xs.c \
    ${MNG_SRC_PATH}libmng_filter.c \
    ${MNG_SRC_PATH}libmng_chunk_descr.c \
    ${MNG_SRC_PATH}libmng_cms.c \
    ${MNG_SRC_PATH}libmng_zlib.c \
    ${MNG_SRC_PATH}libmng_pixels.c \
    ${MNG_SRC_PATH}libmng_error.c \
    ${MNG_SRC_PATH}libmng_trace.c \
    ${MNG_SRC_PATH}libmng_jpeg.c \
    ${MNG_SRC_PATH}libmng_callback_xs.c \
    ${MNG_SRC_PATH}libmng_dither.c \
    ${MNG_SRC_PATH}libmng_hlapi.c \
    ${MNG_SRC_PATH}libmng_chunk_prc.c \

LOCAL_LDLIBS    := -llog -L../lib -lGLESv1_CM

LOCAL_STATIC_LIBRARIES := libjpeg libphysfs

include $(BUILD_SHARED_LIBRARY)


#liblcms
include $(CLEAR_VARS)

LOCAL_MODULE    := liblcms
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}

LOCAL_C_INCLUDES  :=  \
    ${LCMS_SRC_PATH}include/ \

LOCAL_SRC_FILES := \
    ${LCMS_SRC_PATH}src/cmscam02.c \
    ${LCMS_SRC_PATH}src/cmserr.c \
    ${LCMS_SRC_PATH}src/cmstypes.c \
    ${LCMS_SRC_PATH}src/cmsmd5.c \
    ${LCMS_SRC_PATH}src/cmswtpnt.c \
    ${LCMS_SRC_PATH}src/cmsgmt.c \
    ${LCMS_SRC_PATH}src/cmspcs.c \
    ${LCMS_SRC_PATH}src/cmsopt.c \
    ${LCMS_SRC_PATH}src/cmscnvrt.c \
    ${LCMS_SRC_PATH}src/cmsps2.c \
    ${LCMS_SRC_PATH}src/cmssamp.c \
    ${LCMS_SRC_PATH}src/cmsplugin.c \
    ${LCMS_SRC_PATH}src/cmsmtrx.c \
    ${LCMS_SRC_PATH}src/cmspack.c \
    ${LCMS_SRC_PATH}src/cmsio0.c \
    ${LCMS_SRC_PATH}src/cmsgamma.c \
    ${LCMS_SRC_PATH}src/cmscgats.c \
    ${LCMS_SRC_PATH}src/cmsxform.c \
    ${LCMS_SRC_PATH}src/cmsnamed.c \
    ${LCMS_SRC_PATH}src/cmssm.c \
    ${LCMS_SRC_PATH}src/cmsio1.c \
    ${LCMS_SRC_PATH}src/cmsintrp.c \
    ${LCMS_SRC_PATH}src/cmslut.c \
    ${LCMS_SRC_PATH}src/cmsvirt.c \

LOCAL_LDLIBS    := -llog -L../lib -lGLESv1_CM

LOCAL_STATIC_LIBRARIES :=  

include $(BUILD_SHARED_LIBRARY)

#libpng
include $(CLEAR_VARS)

LOCAL_MODULE    := libpng
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}

LOCAL_C_INCLUDES  :=  \
    ${PNG_SRC_PATH} \

LOCAL_SRC_FILES := \
    ${PNG_SRC_PATH}pngerror.c \
    ${PNG_SRC_PATH}pngwio.c \
    ${PNG_SRC_PATH}pngwrite.c \
    ${PNG_SRC_PATH}pngwutil.c \
    ${PNG_SRC_PATH}pngwtran.c \
    ${PNG_SRC_PATH}pngset.c \
    ${PNG_SRC_PATH}pngtrans.c \
    ${PNG_SRC_PATH}example.c \
    ${PNG_SRC_PATH}png.c \
    ${PNG_SRC_PATH}pngrtran.c \
    ${PNG_SRC_PATH}pngmem.c \
    ${PNG_SRC_PATH}pngpread.c \
    ${PNG_SRC_PATH}pngrutil.c \
    ${PNG_SRC_PATH}pngrio.c \
    ${PNG_SRC_PATH}pngget.c \
    ${PNG_SRC_PATH}pngread.c \

LOCAL_LDLIBS    := -llog -L../lib -lGLESv1_CM

LOCAL_STATIC_LIBRARIES := libphysfs

include $(BUILD_SHARED_LIBRARY)

#libjasper
include $(CLEAR_VARS)

LOCAL_MODULE    := libjasper
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}

LOCAL_C_INCLUDES  :=  \
    ${JASPER_SRC_PATH}src/libjasper/include \
    ${JPEG_SRC_PATH} \

LOCAL_SRC_FILES := \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_cm.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_getopt.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_seq.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_malloc.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_init.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_debug.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_stream.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_string.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_version.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_tmr.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_image.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_tvp.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_iccdata.c \
    ${JASPER_SRC_PATH}src/libjasper/base/jas_icc.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_mqcod.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_t1enc.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_dec.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_math.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_util.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_bs.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_tagtree.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_t1cod.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_t2enc.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_mqenc.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_enc.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_qmfb.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_t1dec.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_cs.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_t2cod.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_tsfb.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_mqdec.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_t2dec.c \
    ${JASPER_SRC_PATH}src/libjasper/jpc/jpc_mct.c \
    ${JASPER_SRC_PATH}src/libjasper/dummy.c \
    ${JASPER_SRC_PATH}src/libjasper/pnm/pnm_dec.c \
    ${JASPER_SRC_PATH}src/libjasper/pnm/pnm_enc.c \
    ${JASPER_SRC_PATH}src/libjasper/pnm/pnm_cod.c \
    ${JASPER_SRC_PATH}src/libjasper/jp2/jp2_enc.c \
    ${JASPER_SRC_PATH}src/libjasper/jp2/jp2_cod.c \
    ${JASPER_SRC_PATH}src/libjasper/jp2/jp2_dec.c \
    ${JASPER_SRC_PATH}src/libjasper/pgx/pgx_dec.c \
    ${JASPER_SRC_PATH}src/libjasper/pgx/pgx_enc.c \
    ${JASPER_SRC_PATH}src/libjasper/pgx/pgx_cod.c \
    ${JASPER_SRC_PATH}src/libjasper/bmp/bmp_enc.c \
    ${JASPER_SRC_PATH}src/libjasper/bmp/bmp_dec.c \
    ${JASPER_SRC_PATH}src/libjasper/bmp/bmp_cod.c \
    ${JASPER_SRC_PATH}src/libjasper/jpg/jpg_val.c \
    ${JASPER_SRC_PATH}src/libjasper/jpg/jpg_enc.c \
    ${JASPER_SRC_PATH}src/libjasper/jpg/jpg_dec.c \
    ${JASPER_SRC_PATH}src/libjasper/ras/ras_cod.c \
    ${JASPER_SRC_PATH}src/libjasper/ras/ras_dec.c \
    ${JASPER_SRC_PATH}src/libjasper/ras/ras_enc.c \
    ${JASPER_SRC_PATH}src/libjasper/mif/mif_cod.c \

LOCAL_LDLIBS    := -llog -L../lib -lGLESv1_CM

LOCAL_STATIC_LIBRARIES := libjpeg

include $(BUILD_SHARED_LIBRARY)

#libdevil
include $(CLEAR_VARS)

LOCAL_MODULE    := libdevil
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT -fexceptions
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}


LOCAL_C_INCLUDES  :=  \
    ${DEVIL_SRC_PATH}include \
    ${DEVIL_SRC_PATH}src-IL/include \
    ${DEVIL_SRC_PATH}src-ILU/include \
    ${JASPER_SRC_PATH}src/libjasper/include \
    ${PHYSFS_SRC_PATH} \
    ${PHYSFS_SRC_PATH}zlib123 \
    ${PNG_SRC_PATH} \
    ${MNG_SRC_PATH} \
    ${JPEG_SRC_PATH} \
    ${LCMS_SRC_PATH}include/ \
    ${TIFF_SRC_PATH}libtiff/ \

LOCAL_SRC_FILES := \
    ${DEVIL_SRC_PATH}src-IL/src/il_sun.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_wdp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_doom.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_jp2.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_tpl.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_size.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_rle.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_gif.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_states.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_psp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_devil.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_convbuff.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_ftx.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_vtf.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_iff.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_lif.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pcx.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_io.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_files.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_fastconv.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_error.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_main.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_utx.cpp \
    ${DEVIL_SRC_PATH}src-IL/src/il_pcd.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_neuquant.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dds.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dicom.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_wal.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_icon.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_blp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_mp3.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_header.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_alloc.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_sgi.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_stack.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_texture.c \
    ${DEVIL_SRC_PATH}src-IL/src/altivec_typeconversion.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_targa.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_bmp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_mdl.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pix.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pnm.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_ilbm.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_icns.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_cut.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_profiles.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_hdr.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_register.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_exr.cpp \
    ${DEVIL_SRC_PATH}src-IL/src/il_iwi.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_mng.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_rot.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_jpeg.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_png.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pxr.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_nvidia.cpp \
    ${DEVIL_SRC_PATH}src-IL/src/il_squish.cpp \
    ${DEVIL_SRC_PATH}src-IL/src/il_utility.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_internal.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_psd.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_endian.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_quantizer.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_wbmp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_manip.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pic.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_tiff.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pal.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dds-save.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_raw.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_convert.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dcx.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_fits.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_xpm.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_bits.c \
    ${DEVIL_SRC_PATH}src-IL/src/altivec_common.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dpx.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_rawdata.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_alloc.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_error.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_filter_rcg.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_filter.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_internal.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_main.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_manip.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_mipmap.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_noise.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_region.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_rotate.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_scale.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_scale2d.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_scale3d.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_scaling.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_states.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_utilities.c \

LOCAL_LDLIBS    := -llog -L../lib -lGLESv1_CM -DFT2_BUILD_LIBRARY=1

LOCAL_STATIC_LIBRARIES := \
    libjasper \
    libpng \
    libmng \
    libjpeg \
    liblcms \
    libphysfs \
    libtiff

include $(BUILD_SHARED_LIBRARY)



#mylib
include $(CLEAR_VARS)
LOCAL_MODULE    := libmylib
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT -fexceptions
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}
LOCAL_C_INCLUDES  :=  \
    ${DEVIL_SRC_PATH}include \
    ${DEVIL_SRC_PATH}src-IL/include \
    ${DEVIL_SRC_PATH}src-ILU/include \
    ${JASPER_SRC_PATH}src/libjasper/include \
    ${PHYSFS_SRC_PATH} \
    ${PHYSFS_SRC_PATH}zlib123 \
    ${PNG_SRC_PATH} \
    ${MNG_SRC_PATH} \
    ${JPEG_SRC_PATH} \
    ${LCMS_SRC_PATH}include/ \
    ${TIFF_SRC_PATH}libtiff/ \


LOCAL_SRC_FILES := native.cpp

LOCAL_LDLIBS    := -llog -lGLESv2

LOCAL_STATIC_LIBRARIES := \
    libjasper \
    libpng \
    libmng \
    libjpeg \
    liblcms \
    libphysfs \
    libtiff \
    libdevil \


include $(BUILD_SHARED_LIBRARY)

and my application.mk

APP_STL := gnustl_static
APP_ABI := armeabi-v7a

在我的整个jni文件夹中搜索png_set_longjmp_fn字符串后,我在libpng文件夹中的以下文件中找到它.以下是片段.

pngerror.c

#ifdef PNG_SETJMP_SUPPORTED
/* This API only exists if ANSI-C style error handling is used,
 * otherwise it is necessary for png_default_error to be overridden.
 */
jmp_buf* PNGAPI
png_set_longjmp_fn(png_structrp png_ptr, png_longjmp_ptr longjmp_fn,
    size_t jmp_buf_size)
{
   /* From libpng 1.6.0 the app gets one chance to set a 'jmpbuf_size' value
    * and it must not change after that.  Libpng doesn't care how big the
    * buffer is, just that it doesn't change.
    *
    * If the buffer size is no *larger* than the size of jmp_buf when libpng is

symbols.def

;Version 1.6.2
;--------------------------------------------------------------
; LIBPNG symbol list as a Win32 DEF file
; Contains all the symbols that can be exported from libpng
;--------------------------------------------------------------
LIBRARY

    EXPORTS

         png_access_version_number @1
         png_set_sig_bytes @2
         png_sig_cmp @3
         png_create_read_struct @4
         png_create_write_struct @5
         png_get_compression_buffer_size @6
         png_set_compression_buffer_size @7
         png_set_longjmp_fn @8
         png_longjmp @9

png.h

#ifdef PNG_SETJMP_SUPPORTED
/* This function returns the jmp_buf built in to *png_ptr.  It must be
 * supplied with an appropriate 'longjmp' function to use on that jmp_buf
 * unless the default error function is overridden in which case NULL is
 * acceptable.  The size of the jmp_buf is checked against the actual size
 * allocated by the library - the call will return NULL on a mismatch
 * indicating an ABI mismatch.
 */
PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr,
    png_longjmp_ptr longjmp_fn, size_t jmp_buf_size));
#  define png_jmpbuf(png_ptr) \
      (*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf))))
#else

任何有助于使kitkat找到它的帮助非常感谢.

1 个回答
  • 好吧,从我所有的谷歌搜索,我认为Android 4.4尝试将任何名为libpng的东西链接到它自己的libpng 1.2.46,我的libpng 1.5.6有png_set_longjmp_fn符号,而4.4使用的那个没有

    所以我去了我的android.mk文件,并在我的mainactivity中将libpng重命名为libpngo以及system.load thingy.

    现在工作正常.

    2023-02-09 05:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有