UnsatisfiedLinkError In Android 4.4 libDevil cannot locate symbol "png_set_longjmp_fn"

3k views Asked by At

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.<clinit>(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

after searching my entire jni folder for the png_set_longjmp_fn string, i found it in the following files in my libpng folder. Below are snippets.

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

Any help to make kitkat locate it is much appreciated.

1

There are 1 answers

3
Asiimwe On BEST ANSWER

Well from all my googling, I think Android 4.4 tries to link anything called libpng to its own libpng 1.2.46, My libpng 1.5.6 had the png_set_longjmp_fn symbols and the one 4.4 uses doesn't

So i went to my android.mk file and renamed libpng to libpngo as well as the system.load thingy in my mainactivity.

Works OK now.