JNI编译cximage库(附android.mk和application.mk文件及详细步骤)

来源:互联网 发布:客户信息管理系统php 编辑:程序博客网 时间:2024/05/14 13:02

我们知道cximage是一个非常强大的C++图片库,其依赖于jasper库,png库,jpeg库还有其他的几种库,因我们项目中只用到了这三个库,所以我只使用jni编译这三种库。
先讲一下jni编译成动态so库的几种方式。
1.使用android studio提供的ndk-build编译的方式。
2.使用linux的交叉编译器gcc编译方式。
3.使用tool-chain工具链进行编译。
4.使用android studio的CMakeLists.txt

本文使用的是ndk-build的方式
Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := cximage#源文件指向LOCAL_SRC_FILES :=$(LOCAL_PATH)/cximage599c/cximage/CxImage/tif_xfile.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximabmp.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximadsp.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximaenc.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximaexif.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximage.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximagif.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximahist.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximaico.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximainfo.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximaint.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximaj2k.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximajas.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximajbg.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximajpg.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximalpha.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximalyr.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximamng.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximapal.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximapcx.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximapng.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximasel.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximatga.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximath.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximatif.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximatran.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximawbmp.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximawmf.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/ximawnd.cpp $(LOCAL_PATH)/cximage599c/cximage/CxImage/xmemfile.cpp#加入jasper动态库LOCAL_LDFLAGS := -L$(LOCAL_PATH)/jasper/local/armeabi -ljasper#加入png和jpeg动态库LOCAL_LDFLAGS += -L$(LOCAL_PATH)/png/libs/armeabi -lpng -L$(LOCAL_PATH)/jpeg/libs/armeabi -ljpegLOCAL_LDLIBS := -lz#加入头文件目录LOCAL_C_INCLUDES := $(LOCAL_PATH)/cximage599c/admin $(LOCAL_PATH)/cximage599c/cximage $(LOCAL_PATH)/cximage599c/cximage/.deps $(LOCAL_PATH)/cximage599c/cximage/CxImage $(LOCAL_PATH)/cximage599c/cximage/CxImage/.deps $(LOCAL_PATH)/cximage599c/cximage/doc $(LOCAL_PATH)/cximage599c/cximage/doc/doxy $(LOCAL_PATH)/cximage599c/cximage/doc/doxy/html $(LOCAL_PATH)/cximage599c/cximage/j2k $(LOCAL_PATH)/cximage599c/cximage/j2k/.deps $(LOCAL_PATH)/cximage599c/cximage/jasper $(LOCAL_PATH)/cximage599c/cximage/jasper/include $(LOCAL_PATH)/cximage599c/cximage/jasper/include/jasper $(LOCAL_PATH)/cximage599c/cximage/jbig $(LOCAL_PATH)/cximage599c/cximage/jbig/.deps $(LOCAL_PATH)/cximage599c/cximage/jpeg $(LOCAL_PATH)/cximage599c/cximage/jpeg/.deps $(LOCAL_PATH)/cximage599c/cximage/png $(LOCAL_PATH)/cximage599c/cximage/png/.deps $(LOCAL_PATH)/cximage599c/cximage/tiff $(LOCAL_PATH)/cximage599c/cximage/tiff/.deps $(LOCAL_PATH)/cximage599c/cximage/zlib $(LOCAL_PATH)/cximage599c/cximage/zlib/.depsinclude $(BUILD_SHARED_LIBRARY)

Application.mk

APP_ABI := armeabiAPP_OPIM :=debugAPP_STL := stlport_staticAPP_CPPFLAGS := -fexceptions -frtti #允许异常功能,及运行时类型识别#APP_CPPFLAGS +=-std=c++11 #允许使用c++11的函数等功能APP_CPPFLAGS +=-fpermissive  #此项有效时表示宽松的编译形式,比如没有用到的代码中有错误也可以通过编译;使用GNU STL时不用此项std::string 居然编译不通过!!

通过Application.mk文件可以知道我要生成armeabiCPU架构的so文件
因为cximage依赖于其他三个库,下面附上jasper,png和jpeg的编译方式

1.jasper库的编译,注意jasper库依赖于jpeg库,所以先把jpeg库编译成功

Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := jasper#源文件指向LOCAL_SRC_FILES := $(LOCAL_PATH)/jasper/bmp_cod.c $(LOCAL_PATH)/jasper/bmp_dec.c $(LOCAL_PATH)/jasper/bmp_enc.c $(LOCAL_PATH)/jasper/jas_cm.c $(LOCAL_PATH)/jasper/jas_debug.c $(LOCAL_PATH)/jasper/jas_getopt.c $(LOCAL_PATH)/jasper/jas_icc.c $(LOCAL_PATH)/jasper/jas_iccdata.c $(LOCAL_PATH)/jasper/jas_image.c $(LOCAL_PATH)/jasper/jas_init.c $(LOCAL_PATH)/jasper/jas_malloc.c $(LOCAL_PATH)/jasper/jas_seq.c $(LOCAL_PATH)/jasper/jas_stream.c $(LOCAL_PATH)/jasper/jas_string.c $(LOCAL_PATH)/jasper/jas_tvp.c $(LOCAL_PATH)/jasper/jas_version.c $(LOCAL_PATH)/jasper/jp2_cod.c $(LOCAL_PATH)/jasper/jp2_dec.c $(LOCAL_PATH)/jasper/jp2_enc.c $(LOCAL_PATH)/jasper/jpc_bs.c $(LOCAL_PATH)/jasper/jpc_cs.c $(LOCAL_PATH)/jasper/jpc_dec.c $(LOCAL_PATH)/jasper/jpc_enc.c $(LOCAL_PATH)/jasper/jpc_math.c $(LOCAL_PATH)/jasper/jpc_mct.c $(LOCAL_PATH)/jasper/jpc_mqcod.c $(LOCAL_PATH)/jasper/jpc_mqdec.c $(LOCAL_PATH)/jasper/jpc_mqenc.c $(LOCAL_PATH)/jasper/jpc_qmfb.c $(LOCAL_PATH)/jasper/jpc_t1cod.c $(LOCAL_PATH)/jasper/jpc_t1dec.c $(LOCAL_PATH)/jasper/jpc_t1enc.c $(LOCAL_PATH)/jasper/jpc_t2cod.c $(LOCAL_PATH)/jasper/jpc_t2dec.c $(LOCAL_PATH)/jasper/jpc_t2enc.c $(LOCAL_PATH)/jasper/jpc_tagtree.c $(LOCAL_PATH)/jasper/jpc_tsfb.c $(LOCAL_PATH)/jasper/jpc_util.c $(LOCAL_PATH)/jasper/jpg_dec.c $(LOCAL_PATH)/jasper/jpg_dummy.c $(LOCAL_PATH)/jasper/jpg_enc.c $(LOCAL_PATH)/jasper/jpg_val.c $(LOCAL_PATH)/jasper/mif_cod.c $(LOCAL_PATH)/jasper/pgx_cod.c $(LOCAL_PATH)/jasper/pgx_dec.c $(LOCAL_PATH)/jasper/pgx_enc.c $(LOCAL_PATH)/jasper/pnm_cod.c $(LOCAL_PATH)/jasper/pnm_dec.c $(LOCAL_PATH)/jasper/pnm_enc.c $(LOCAL_PATH)/jasper/ras_cod.c $(LOCAL_PATH)/jasper/ras_dec.c $(LOCAL_PATH)/jasper/ras_enc.c#导出头文件LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\                           $(LOCAL_PATH)/include/#加入头文件LOCAL_C_INCLUDES := $(LOCAL_PATH)/jasper/.deps $(LOCAL_PATH)/jasper/include $(LOCAL_PATH)/jasper/include/jasper#LOCAL_CFLAGS := -I$(LOCAL_PATH)/libjpegLOCAL_LDFLAGS := -L$(LOCAL_PATH)/jpeg/libs/armeabi -ljpeginclude $(BUILD_SHARED_LIBRARY)

Application.mk

APP_ABI := armeabiAPP_OPIM :=debug#引入Android原生支持库,如stdc++APP_STL := stlport_staticAPP_CPPFLAGS := -fexceptions -frtti #允许异常功能,及运行时类型识别#APP_CPPFLAGS +=-std=c++11 #允许使用c++11的函数等功能APP_CPPFLAGS +=-fpermissive  #此项有效时表示宽松的编译形式,比如没有用到的代码中有错误也可以通过编译;使用GNU STL时不用此项std::string 居然编译不通过!!

2.jpeg库的编译
Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := jpeg#源文件指向#LOCAL_SRC_FILES := $(LOCAL_PATH)/jpeg-9b/cdjpeg.c $(LOCAL_PATH)/jpeg-9b/cjpeg.c $(LOCAL_PATH)/jpeg-9b/ckconfig.c $(LOCAL_PATH)/jpeg-9b/djpeg.c $(LOCAL_PATH)/jpeg-9b/example.c $(LOCAL_PATH)/jpeg-9b/jaricom.c $(LOCAL_PATH)/jpeg-9b/jcapimin.c $(LOCAL_PATH)/jpeg-9b/jcapistd.c $(LOCAL_PATH)/jpeg-9b/jcarith.c $(LOCAL_PATH)/jpeg-9b/jccoefct.c $(LOCAL_PATH)/jpeg-9b/jccolor.c $(LOCAL_PATH)/jpeg-9b/jcdctmgr.c $(LOCAL_PATH)/jpeg-9b/jchuff.c $(LOCAL_PATH)/jpeg-9b/jcinit.c $(LOCAL_PATH)/jpeg-9b/jcmainct.c $(LOCAL_PATH)/jpeg-9b/jcmarker.c $(LOCAL_PATH)/jpeg-9b/jcmaster.c $(LOCAL_PATH)/jpeg-9b/jcomapi.c $(LOCAL_PATH)/jpeg-9b/jcparam.c $(LOCAL_PATH)/jpeg-9b/jcprepct.c $(LOCAL_PATH)/jpeg-9b/jcsample.c $(LOCAL_PATH)/jpeg-9b/jctrans.c $(LOCAL_PATH)/jpeg-9b/jdapimin.c $(LOCAL_PATH)/jpeg-9b/jdapistd.c $(LOCAL_PATH)/jpeg-9b/jdarith.c $(LOCAL_PATH)/jpeg-9b/jdatadst.c $(LOCAL_PATH)/jpeg-9b/jdatasrc.c $(LOCAL_PATH)/jpeg-9b/jdcoefct.c $(LOCAL_PATH)/jpeg-9b/jdcolor.c $(LOCAL_PATH)/jpeg-9b/jddctmgr.c $(LOCAL_PATH)/jpeg-9b/jdhuff.c $(LOCAL_PATH)/jpeg-9b/jdinput.c $(LOCAL_PATH)/jpeg-9b/jdmainct.c $(LOCAL_PATH)/jpeg-9b/jdmarker.c $(LOCAL_PATH)/jpeg-9b/jdmaster.c $(LOCAL_PATH)/jpeg-9b/jdmerge.c $(LOCAL_PATH)/jpeg-9b/jdpostct.c $(LOCAL_PATH)/jpeg-9b/jdsample.c $(LOCAL_PATH)/jpeg-9b/jdtrans.c $(LOCAL_PATH)/jpeg-9b/jerror.c $(LOCAL_PATH)/jpeg-9b/jfdctflt.c $(LOCAL_PATH)/jpeg-9b/jfdctfst.c $(LOCAL_PATH)/jpeg-9b/jfdctint.c $(LOCAL_PATH)/jpeg-9b/jidctflt.c $(LOCAL_PATH)/jpeg-9b/jidctfst.c $(LOCAL_PATH)/jpeg-9b/jidctint.c $(LOCAL_PATH)/jpeg-9b/jmemansi.c $(LOCAL_PATH)/jpeg-9b/jmemdos.c $(LOCAL_PATH)/jpeg-9b/jmemmac.c $(LOCAL_PATH)/jpeg-9b/jmemmgr.c $(LOCAL_PATH)/jpeg-9b/jmemname.c $(LOCAL_PATH)/jpeg-9b/jmemnobs.c $(LOCAL_PATH)/jpeg-9b/jpegtran.c $(LOCAL_PATH)/jpeg-9b/jquant1.c $(LOCAL_PATH)/jpeg-9b/jquant2.c $(LOCAL_PATH)/jpeg-9b/jutils.c $(LOCAL_PATH)/jpeg-9b/rdbmp.c $(LOCAL_PATH)/jpeg-9b/rdcolmap.c $(LOCAL_PATH)/jpeg-9b/rdgif.c $(LOCAL_PATH)/jpeg-9b/rdjpgcom.c $(LOCAL_PATH)/jpeg-9b/rdppm.c $(LOCAL_PATH)/jpeg-9b/rdrle.c $(LOCAL_PATH)/jpeg-9b/rdswitch.c $(LOCAL_PATH)/jpeg-9b/rdtarga.c $(LOCAL_PATH)/jpeg-9b/transupp.c $(LOCAL_PATH)/jpeg-9b/wrbmp.c $(LOCAL_PATH)/jpeg-9b/wrgif.c $(LOCAL_PATH)/jpeg-9b/wrjpgcom.c $(LOCAL_PATH)/jpeg-9b/wrppm.c $(LOCAL_PATH)/jpeg-9b/wrrle.c $(LOCAL_PATH)/jpeg-9b/wrtarga.cLOCAL_SRC_FILES := jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \                           jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \                           jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \                           jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \                           jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \                           jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \                           jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \                           jquant2.c jutils.c jmemmgr.c jmemnobs.c#导出头文件LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\                           $(LOCAL_PATH)/include/#加入头文件#LOCAL_C_INCLUDES := $(LOCAL_PATH)/jpeg-9b/include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_ABI := allAPP_OPIM :=debugAPP_STL := stlport_staticAPP_CPPFLAGS := -fexceptions -frtti #允许异常功能,及运行时类型识别#APP_CPPFLAGS +=-std=c++11 #允许使用c++11的函数等功能APP_CPPFLAGS +=-fpermissive  #此项有效时表示宽松的编译形式,比如没有用到的代码中有错误也可以通过编译;使用GNU STL时不用此项std::string 居然编译不通过!!

3.png库的编译
由于该库不是我编译的,同事编译的,直接给出编译好的.so文件

后续补充吧。

0 0
原创粉丝点击