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为
- LOCAL_PATH := $(call my-dir)
- include $(LOCAL_PATH)/Makefile.srcs
- include $(CLEAR_VARS)
- LOCAL_MODULE := FreeImage
- LOCAL_C_INCLUDES := $(LOCAL_PATH)/Source \
- $(LOCAL_PATH)/Source/Metadata \
- $(LOCAL_PATH)/Source/FreeImageToolkit \
- $(LOCAL_PATH)/Source/LibJPEG \
- $(LOCAL_PATH)/Source/LibPNG \
- $(LOCAL_PATH)/Source/LibTIFF4 \
- $(LOCAL_PATH)/Source/ZLib \
- $(LOCAL_PATH)/Source/LibOpenJPEG \
- $(LOCAL_PATH)/Source/OpenEXR \
- $(LOCAL_PATH)/Source/OpenEXR/Half \
- $(LOCAL_PATH)/Source/OpenEXR/Iex \
- $(LOCAL_PATH)/Source/OpenEXR/IlmImf \
- $(LOCAL_PATH)/Source/OpenEXR/IlmThread \
- $(LOCAL_PATH)/Source/OpenEXR/Imath \
- $(LOCAL_PATH)/Source/LibRawLite \
- $(LOCAL_PATH)/Source/LibRawLite/dcraw \
- $(LOCAL_PATH)/Source/LibRawLite/internal \
- $(LOCAL_PATH)/Source/LibRawLite/libraw \
- $(LOCAL_PATH)/Source/LibRawLite/src
- LOCAL_SRC_FILES := $(SRCS)
- LOCAL_CPP_FEATURES := rtti exceptions
- #LOCAL_CFLAGS := -O3 -fPIC
- include $(BUILD_SHARED_LIBRARY)
4. 修改Application.mk为 全平台编译
- APP_STL := gnustl_static
- APP_ABI := all
- APP_OPTIM := release
或者只是ARM的
- NDK_TOOLCHAIN_VERSION:=4.8
- APP_STL := gnustl_static
- APP_CPPFLAGS := -std=c++11
- APP_ABI := armeabi
5. 找到LibTIFF4/tif_config.h 注释掉
- //#define HAVE_SEARCH_H 1
6. 由于编译会找不到LibRawLite\internal\dcraw_common.cpp最上面添加swab函数

- #include <stdint.h>
- #include <asm/byteorder.h>
- static void swab(const void *from, void *to, ssize_t n)
- {
- ssize_t i;
- if (n < 0)
- {
- return;
- }
- for (i = 0; i < (n / 2) * 2; i += 2)
- {
- *((uint16_t*)to + i) = __arch__swab16(*((uint16_t*)from + i));
- }
- }
OpenEXR有点兼容性的小BUG
解决办法是找到ImfHuf.cpp 修改下头文件包含的顺序

- #include <string.h>
- #include <cstring>
- #include <algorithm>
- #include <ImfHuf.h>
- #include <ImfInt64.h>
- #include <ImfAutoArray.h>
- #include "Iex.h"
- #include <assert.h>
8. 编译
NDK编译FreeImage的更多相关文章
- 使用ndk编译c可执行程序
1.创建工程目录 在ubuntu系统下搭建好ndk编译环境,创建test目录 mkdir test 在test目录下创建jni目录 cd test mkdir jni 2.编写源代码 vim hel ...
- Android APP使用NDK编译后的ffmpeg库出现undefined reference to 'posix_memalign'错误
在android程序中使用NDK编译后的ffmpeg库的时候出现了如下错误: jni/libs/libavutil.a(mem.o): in function av_malloc:libavutil/ ...
- Linux下NDK编译FFMPEG包含neon参数
FFMPEG编译成Android库已经有很多案例了,编译优化neon的也很多,以下是我通过实践成功的案例,这里主要讲编译的配置文件,其他设置可结合Linux下使用NDK编译FFMPEG(libstag ...
- Linux下使用NDK编译FFMPEG(libstagefright)
这个月要负责一个项目,使用FFMPEG渲染视频,主要是Android端的,由于性能要求,要使用硬解码,但网上大多数教程都是没有libstagefright的,所以个人觉得,生成的so库文件也是没有开启 ...
- Android Studio 中关于NDK编译及jni header生成的问题
之前由于工作原因使用grails这个基于groovy的框架做项目,对groovy感觉很好. 基于groovy的gradle构建系统对我而言自然也是好的没得说. Android Studio 正式版出来 ...
- [原]如何用Android NDK编译FFmpeg
我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...
- ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用
作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...
- android开发 NDK 编译和使用静态库、动态库 (转)
在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件 Android.mk文件: Android提供的一种makefile文件, ...
- Windows下配置cygwin和ndk编译环境
cygwin安装 正确的安装步骤其实很简单:1. 下载setup-86_64.exe 2. 直接从网上下载安装,选择包时,顶部选择“default”不变 3. 搜索make,勾选make,cmake, ...
随机推荐
- 构造 hihocoder 1257 Snake Carpet (15北京I)
题目传送门 题意:贪吃蛇,要求长度奇数的蛇转弯次数为正奇数,长度偶数转弯次数为正偶数,且组成矩形.(北大出的题咋都和矩形相关!!!) 分析:构造找规律,想到就简单了.可以构造 宽:(n + 1) / ...
- HDU2588 GCD(欧拉函数)
题目问[1,n]中与n的gcd大于等于m的数的个数. 好难想... 假设x满足条件,那么gcd(x,n)=d>=m,而x/d与n/d一定互质. 又x<=n,所以x/d<=n/d. 于 ...
- LightOJ1125 Divisible Group Sums(DP)
题目问从N个数中取出M个数,有多少种取法使它们的和能被D整除. dp[i][j][k]表示,前i个数取出j个数模D的余数为k的方案数 我用“我为人人”的方式来转移,就从i到i+1转移,对于第i+1个数 ...
- Revit二次开发示例:EventsMonitor
在该示例中,插件在Revit启动时弹出事件监控选择界面,供用户设置,也可在添加的Ribbon界面完成设置.当Revit进行相应操作时,弹出窗体会记录事件时间和名称. #region Namespace ...
- sprintf() in c
Declaration Following is the declaration for sprintf() function. int sprintf(char *str, const char * ...
- 20145325张梓靖 实验五 "JAVA的网络编程"
20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...
- TYVJ P1090 母舰 Label:模拟,题目看清就好
背景 广东汕头聿怀初中 Train#3 Problem 1 描述 在小A的星际大战游戏中,一艘强力的母舰往往决定了一场战争的胜负.一艘母舰的攻击力是普通的MA(Mobile Armor)无法比较的.对 ...
- [Unity2D]预制件Prefab
预制件Prefab是一个组件模板,比如在游戏里面要实现开枪的时候会有子弹不停地从枪口飞出来,那么就可以通过Prefab来实现子弹的游戏对象,表示所有的子弹都是从同一个Prefab来构建出来的,也可以理 ...
- Winform窗体事件发生顺序
Form 和Control 类公开了一组与应用程序启动和关闭相关联的事件.当Windows 窗体应用程序启动时,主窗体的启动事件按以下顺序引发: System.Windows.Forms.Contro ...
- Ubuntu SSH root user cannot login
Open /etc/ssh/sshd_config and check if PermitRootLogin is set to yes. If not, then set it to yes and ...