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为

[cpp] view plaincopy

  1. LOCAL_PATH := $(call my-dir)
  2. include $(LOCAL_PATH)/Makefile.srcs
  3. include $(CLEAR_VARS)
  4. LOCAL_MODULE       := FreeImageStatic
  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_STATIC_LIBRARY)
  28. include $(CLEAR_VARS)
  29. LOCAL_MODULE           := FreeImage
  30. LOCAL_STATIC_LIBRARIES := FreeImageStatic
  31. include $(BUILD_SHARED_LIBRARY)

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

[cpp] view plaincopy

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

或者只是ARM的

[cpp] view plaincopy

  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 注释掉

[cpp] view plaincopy

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

时间: 2024-08-28 23:03:22

NDK编译FreeImage的相关文章

Android NDK 编译加入so文件

在cocos2d-x中集成百度语音识别的时候,运行build_native.py会把libs/armeabi目录清空. 以下是解决办法,把so文件放在jni/prebuilt里面. 修改Android.mk文件,主要有两行include $(CLEAR_VARS) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #百度语音识别so LOCAL_MODULE := BDVoiceRecognitionClient_V1 LOCAL_SRC_FI

[原]如何用Android NDK编译FFmpeg

\我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的NDK编译出来可以在Android下面可以使用的FFmpeg动态链接库呢?写下这篇文章就是学习如何裁剪并且编译出来可以使用的动态库. 一.获取FFmpeg源码: 首先在编译之前,得获取一份FFmpeg的源码,如果你没有git并且也不打算使用,你可以去FFmpeg官网http://ffmpeg.org/

使用Android Studio自带的NDK编译JNI

/********************************************************************************** * 使用Android Studio自带的NDK编译JNI * 说明: * 省得自己另外去下载NDK,编译JNI,麻烦. * * 2017-4-30 深圳 龙华民治樟坑村 曾剑锋 ****************************************************************************

一个小玩具:NDK编译FFmpeg的例子

FFmpeg NDK编译 和最简单的APK 准备 硬件: 一台电脑,实验在Lenovo T430上 一个Android设备,实验在 三星S3/A7 编译环境: Ubuntu 14.04 (ant\java等命令必须支持) 工具包: NDK: https://dl.google.com/android/ndk/android-ndk32-r10b-linux-x86_64.tar.bz2 SDK:https://dl.google.com/android/adt/adt-bundle-linux-

[Android]Cygwin使用及NDK编译方法

在Windows XP, Cygwin, NDK SDK r5b下成功编译了ffmpeg,下面是完整的编译过程: 一.准备工作 2.下载Cygwin, 请猛击这里 3.下载Android SDK,请猛击这里,Android SDK的网页 4.下载Android NDK SDK r5b, 请猛击这里,NDK SDK的网页 5.下载ffmpeg,可以下载压缩包,也可以git一个snapshot 好了,有必要说明一下Android SDK和Android NDK SDK的区别: Android SDK

工作积累之NDK编译STL (zhuan)

方法: 1.在jni目录下新建Application.mk; 加入 APP_STL :=  stlport_static  右边的值还可以换成下面几个: system - 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持 stlport_static - 使用STLport作为静态库,这项是Android开发网极力推荐的 stlport_shared - STLport 作为动态库,这个可能产生兼容性和部分低版本的Android固件,目前不推荐使用. gnust

anroid ndk编译ffmpeg 引用librtmp libx264

Ffmpeg 无处不在,自然android系统少不了它,折腾了不少时间完成 ndk编译ffmpeg,生成so库中引用了外部库librtmp,libx264.条条大路通罗马, 也许还有别的更好的方法去完成它,我没有仔细研究.我使用的方法完全可以达到我的预期目的. 一.选择编译环境 可以选择windows下cygwin,也可以选择linux系统,我建议选择后者.花了很多时间在cygwin下编译,configure时总是提示链接需要的so文件找不到.无奈 之下转到linux环境下编译.我用的版本是ub

NDK编译可执行文件在Android 中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法。

由于使用了NDK编译的可执行文件在应用中调用,在Android 7.0上的运行情况发现,当运行该可执行文件时,报如下错误: error: only position independent executables (PIE) are supported. PIE这个安全机制从4.1引入,但是Android L之前的系统版本并不会去检验可执行文件是否基于PIE编译出的.因此不会报错.但是Android L已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行.解决办法非常简单,在A

levmar ndk 编译

levmar是一个强大的和高效率的C/C++库,采用Levenberg - 马奎德(LM)优化算法, 主要是为了解决非线性最小二乘问题.官网是:http://users.ics.forth.gr/~lourakis/levmar/ 在PC引用,网上有挺多的资料可以查询到,但我想应用到Android上来,google了一下,找不到太多资料,只有一个国外几年前的项目:https://github.com/3deggi/levmar-ndk 因为项目太久远,还是采用 eclipse IDE来开发的,我