NDK编译FreeImage

参考了 以下2篇文章 并作了一小点修改


http://recursify.com/blog/2013/05/25/building-freeimage-for-android

http://blog.sina.com.cn/s/blog_4119bd830100w7ov.html


1. 从官网下载FreeImage 3.15.4 的源码  http://freeimage.sourceforge.net/download.html


2. 新建安卓工程  Add Native Support 


  把FreeImage目录下的Source目录 和 Makefile.srcs复制到jni根目录下 


3. 修改Android.mk为

 

  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(LOCAL_PATH)/Makefile.srcs  
  4.   
  5. include $(CLEAR_VARS)  
  6. LOCAL_MODULE       := FreeImage
  7. LOCAL_C_INCLUDES   := $(LOCAL_PATH)/Source \  
  8.                         $(LOCAL_PATH)/Source/Metadata \  
  9.                         $(LOCAL_PATH)/Source/FreeImageToolkit \  
  10.                         $(LOCAL_PATH)/Source/LibJPEG \  
  11.                         $(LOCAL_PATH)/Source/LibPNG \  
  12.                         $(LOCAL_PATH)/Source/LibTIFF4 \  
  13.                         $(LOCAL_PATH)/Source/ZLib \  
  14.                         $(LOCAL_PATH)/Source/LibOpenJPEG \  
  15.                         $(LOCAL_PATH)/Source/OpenEXR \  
  16.                         $(LOCAL_PATH)/Source/OpenEXR/Half \  
  17.                         $(LOCAL_PATH)/Source/OpenEXR/Iex \  
  18.                         $(LOCAL_PATH)/Source/OpenEXR/IlmImf \  
  19.                         $(LOCAL_PATH)/Source/OpenEXR/IlmThread \  
  20.                         $(LOCAL_PATH)/Source/OpenEXR/Imath \  
  21.                         $(LOCAL_PATH)/Source/LibRawLite \  
  22.                         $(LOCAL_PATH)/Source/LibRawLite/dcraw \  
  23.                         $(LOCAL_PATH)/Source/LibRawLite/internal \  
  24.                         $(LOCAL_PATH)/Source/LibRawLite/libraw \  
  25.                         $(LOCAL_PATH)/Source/LibRawLite/src  
  26. LOCAL_SRC_FILES    := $(SRCS)  
  27. LOCAL_CPP_FEATURES := rtti exceptions  
  28. #LOCAL_CFLAGS       := -O3 -fPIC  
  29. include $(BUILD_SHARED_LIBRARY) 

 

4. 修改Application.mk为 全平台编译

 

  1. APP_STL   := gnustl_static  
  2. APP_ABI   := all  
  3. APP_OPTIM := release  

或者只是ARM的

 

  1. NDK_TOOLCHAIN_VERSION:=4.8  
  2. APP_STL := gnustl_static  
  3. APP_CPPFLAGS := -std=c++11  
  4. APP_ABI    := armeabi  



5. 找到LibTIFF4/tif_config.h 注释掉

 

  1. //#define HAVE_SEARCH_H 1  



6. 由于编译会找不到LibRawLite\internal\dcraw_common.cpp最上面添加swab函数

在CODE上查看代码片派生到我的代码片

  1. #include <stdint.h>  
  2. #include <asm/byteorder.h>  
  3.   
  4. static void swab(const void *from, void *to, ssize_t n)  
  5. {  
  6.     ssize_t i;  
  7.   
  8.     if (n < 0)  
  9.     {  
  10.         return;  
  11.     }  
  12.     for (i = 0; i < (n / 2) * 2; i += 2)  
  13.     {  
  14.         *((uint16_t*)to + i) = __arch__swab16(*((uint16_t*)from + i));  
  15.     }  
  16. }  

OpenEXR有点兼容性的小BUG

  解决办法是找到ImfHuf.cpp 修改下头文件包含的顺序

在CODE上查看代码片派生到我的代码片

  1. #include <string.h>  
  2. #include <cstring>  
  3. #include <algorithm>  
  4. #include <ImfHuf.h>  
  5. #include <ImfInt64.h>  
  6. #include <ImfAutoArray.h>  
  7. #include "Iex.h"  
  8. #include <assert.h>  




8. 编译

posted @ 2015-03-02 11:21  星语海蓝  Views(1025)  Comments(0Edit  收藏  举报