参考了 以下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. include $(LOCAL_PATH)/Makefile.srcs
  3. include $(CLEAR_VARS)
  4. LOCAL_MODULE       := FreeImage
  5. LOCAL_C_INCLUDES   := $(LOCAL_PATH)/Source \
  6. $(LOCAL_PATH)/Source/Metadata \
  7. $(LOCAL_PATH)/Source/FreeImageToolkit \
  8. $(LOCAL_PATH)/Source/LibJPEG \
  9. $(LOCAL_PATH)/Source/LibPNG \
  10. $(LOCAL_PATH)/Source/LibTIFF4 \
  11. $(LOCAL_PATH)/Source/ZLib \
  12. $(LOCAL_PATH)/Source/LibOpenJPEG \
  13. $(LOCAL_PATH)/Source/OpenEXR \
  14. $(LOCAL_PATH)/Source/OpenEXR/Half \
  15. $(LOCAL_PATH)/Source/OpenEXR/Iex \
  16. $(LOCAL_PATH)/Source/OpenEXR/IlmImf \
  17. $(LOCAL_PATH)/Source/OpenEXR/IlmThread \
  18. $(LOCAL_PATH)/Source/OpenEXR/Imath \
  19. $(LOCAL_PATH)/Source/LibRawLite \
  20. $(LOCAL_PATH)/Source/LibRawLite/dcraw \
  21. $(LOCAL_PATH)/Source/LibRawLite/internal \
  22. $(LOCAL_PATH)/Source/LibRawLite/libraw \
  23. $(LOCAL_PATH)/Source/LibRawLite/src
  24. LOCAL_SRC_FILES    := $(SRCS)
  25. LOCAL_CPP_FEATURES := rtti exceptions
  26. #LOCAL_CFLAGS       := -O3 -fPIC
  27. 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函数

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

OpenEXR有点兼容性的小BUG

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

  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. 编译

NDK编译FreeImage的更多相关文章

  1. 使用ndk编译c可执行程序

    1.创建工程目录  在ubuntu系统下搭建好ndk编译环境,创建test目录 mkdir test 在test目录下创建jni目录 cd test mkdir jni 2.编写源代码 vim hel ...

  2. Android APP使用NDK编译后的ffmpeg库出现undefined reference to 'posix_memalign'错误

    在android程序中使用NDK编译后的ffmpeg库的时候出现了如下错误: jni/libs/libavutil.a(mem.o): in function av_malloc:libavutil/ ...

  3. Linux下NDK编译FFMPEG包含neon参数

    FFMPEG编译成Android库已经有很多案例了,编译优化neon的也很多,以下是我通过实践成功的案例,这里主要讲编译的配置文件,其他设置可结合Linux下使用NDK编译FFMPEG(libstag ...

  4. Linux下使用NDK编译FFMPEG(libstagefright)

    这个月要负责一个项目,使用FFMPEG渲染视频,主要是Android端的,由于性能要求,要使用硬解码,但网上大多数教程都是没有libstagefright的,所以个人觉得,生成的so库文件也是没有开启 ...

  5. Android Studio 中关于NDK编译及jni header生成的问题

    之前由于工作原因使用grails这个基于groovy的框架做项目,对groovy感觉很好. 基于groovy的gradle构建系统对我而言自然也是好的没得说. Android Studio 正式版出来 ...

  6. [原]如何用Android NDK编译FFmpeg

    我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...

  7. ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用

    作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  8. android开发 NDK 编译和使用静态库、动态库 (转)

    在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件 Android.mk文件: Android提供的一种makefile文件, ...

  9. Windows下配置cygwin和ndk编译环境

    cygwin安装 正确的安装步骤其实很简单:1. 下载setup-86_64.exe 2. 直接从网上下载安装,选择包时,顶部选择“default”不变 3. 搜索make,勾选make,cmake, ...

随机推荐

  1. Codeforces Round #330 (Div. 2)

    C题题目出错了,unrating,2题就能有很好的名次,只能呵呵了. 水 A - Vitaly and Night /***************************************** ...

  2. 水题 HDOJ 4727 The Number Off of FFF

    题目传送门 /* 水题:判断前后的差值是否为1,b[i]记录差值,若没有找到,则是第一个出错 */ #include <cstdio> #include <iostream> ...

  3. 逆序数 POJ 2299 Ultra-QuickSort

    题目传送门 /* 题意:就是要求冒泡排序的交换次数. 逆序数:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序. 一个排列中逆序的总数就称为这个排列的逆 ...

  4. 模拟 Coder-Strike 2014 - Round 1 A. Poster

    题目地址:http://codeforces.com/problemset/problem/412/A /* 模拟:题目没看懂,但操作很简单,从最近的一头(如果不在一端要先移动到一端)往另一头移动,顺 ...

  5. POJ3057 Evacuation(二分图最大匹配)

    人作X部:把门按时间拆点,作Y部:如果某人能在某个时间到达某门则连边.就是个二分图最大匹配. 时间可以二分枚举,或者直接从1枚举时间然后加新边在原来的基础上进行增广. 谨记:时间是个不可忽视的维度. ...

  6. spring整合quartz并持久化

    spring整合quartz有两种方式: 一.常见是使用配置文件,将定时任务保存到内存中 简单示例: <!-- 短信催还提醒任务调度 --> <bean id="overd ...

  7. 8.20 css样式表:样式分类,选择器。样式属性,

    样式表分类: 1.内联样式表, 和html联合显示,例:<p style="font-size:14px;">内联样式表</p> 2.内嵌样式表 作为一个独 ...

  8. Windows编译安装OpenSSL

    windows下使用vs2008中的nmake编译安装openssl的脚本build.bat: echo off & color 0A :: 项目名称 set PROJECT=openssl ...

  9. Gitolite配置管理和GIT基本操作

    简述公司版gitolite的项目配置与管理 1. 基于秘钥对的管理 1.1 客户端(需要访问代码库的机器)生成秘钥对,采用RSA加密ssh-keygen -t rsa -f path_to_store ...

  10. PHP 命名空间总结

    PHP 5.3 及以上版本中引入了命名空间 的概念. notes: 1. 在 PHP 中,命名空间用来解决在编写 类库 或 应用程序 时创建 可重用 的 代码如 类 或 函数 时碰到的两类问题: ① ...