最近开发中,需要对图片做一些处理与线性技术,这时就用到了Ceres Solver。如何把Ceres Solver集成到Android里呢? 官网给了一个解决方案,简洁明了:
 
Download the Android NDK version r9d or later. Run ndk-build from inside the jni directory. Use the libceres.a that gets created.(意思是:下载NDK r9d 或更新版本,然后进入 下载最新ceres-solver包的jni目录里,运行ndk-build 得到 libceres.a 静态包)
 
步骤如下:
 1、添加NDK的环境变量,不懂的可以搜索安装教程。
2、运行 =》cmd,打开命令行窗口, cd 进入到下载ceres-solver包的jni目录里,运行 ndk-build
报:jni/Android.mk:80: *** Ceres requires NDK version r9d or greater . Stop. 错误!
查看 Android.mk 80 行,可以知道它是判断当前NDK的版本,运行了 jni 目录下的shell脚本(assert_ndk_version.sh)。
但是我发现我的NDK已经是最新了,为什么还报这异常呢? 查看当前的NDK版本,可以点击这
认真查看了 assert_ndk_version.sh 文件的内容,发现,它是查找NDK根目录下的一个叫 RELEASE.TXT 文件, 但我们没有。所以新建一个, 然后在里面加入 r14b (64-bit) (替换成你的NDK版本)
在MAC 系统上可以跑通,在windows 上还会继续报上面的错误,因为windows 不能直接跑shell脚本。 直接了当,Android.mk 79—81行 用 # 注释掉。 然后就会编译出 libceres.a 静态文件。
 
但是这样编译出来的静态文件,在运用的时候,还是会报错,打开 ceres-solver包的jni目录下的
Application.mk文件,可以看到:
APP_CPPFLAGS += -fno-exceptions
APP_CPPFLAGS += -fno-rtti
APP_STL := c++_static
 
 
 
名称 说明> 功能
libstdc++(默认) 默认最小系统 C++ 运行时库。 不适用
gabi++_static GAbi++ 运行时(静态)。 C++ 异常和 RTTI
gabi++_shared GAbi++ 运行时(共享)。 C++ 异常和 RTTI
stlport_static STLport 运行时(静态)。 C++ 异常和 RTTI;标准库
stlport_shared STLport 运行时(共享)。 C++ 异常和 RTTI;标准库
gnustl_static GNU STL(静态)。 C++ 异常和 RTTI;标准库
gnustl_shared GNU STL(共享)。 C++ 异常和 RTTI;标准库
c++_static LLVM libc++ 运行时(静态)。 C++ 异常和 RTTI;标准库
c++_shared LLVM libc++ 运行时(共享)。 C++ 异常和 RTTI;标准库
 
c++_static 我们平常比较少用到(因为我不熟悉C/C++),所以将上述三个参数改为:
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
 
然后ndk-build,得到一个正确的 libceres.a 静态文件。 (欢迎留言讨论)
 
 
我编译好的ceres-solver 项目 http://pan.baidu.com/s/1bo3ENoj
 

Ceres Solver for android的更多相关文章

  1. Ceres Solver 入门稍微多一点

    其实ceres solver用了挺多的,可能是入门不精,有时候感觉感觉不理解代码上是怎么实现的,这次就通过ceres的官网仔细看了一些介绍,感觉对cpp了解更好了一些. 跟g2o的比较的话,感觉cer ...

  2. VINS(九)Ceres Solver优化(未完待续)

    使用Ceres Solver库处理后端优化问题,首先系统的优化函数为

  3. Ceres Solver: 高效的非线性优化库(二)实战篇

    Ceres Solver: 高效的非线性优化库(二)实战篇 接上篇: Ceres Solver: 高效的非线性优化库(一) 如何求导 Ceres Solver提供了一种自动求导的方案,上一篇我们已经看 ...

  4. Ceres Solver: 高效的非线性优化库(一)

    Ceres Solver: 高效的非线性优化库(一) 注:本文基于Ceres官方文档,大部分由英文翻译而来.可作为非官方参考文档. 简介 Ceres,原意是谷神星,是发现不久的一颗轨道在木星和火星之间 ...

  5. Android平台使用Ceres Solver

    在Android平台上使用Ceres求解器,官方教程不明确,且编译过程遇到了很多问题. 环境 Ubuntu 18.04 源代码 https://github.com/Great-Keith/ceres ...

  6. Ceres Solver 在win8+vs2013环境下的安装

    参考博文:https://blog.csdn.net/wzheng92/article/details/79504709

  7. 跨平台编译ceres for Android

    折腾了几乎一天,记录一下. 最大的坑是官网给出的 1.进入ceres源代码目录下的jni目录 2.EIGEN_PATH="指向eigen库目录,即包含EIGEN文件夹的那个文件夹” ndk- ...

  8. 头部姿态估计 - Android

    概括 通过Dlib获得当前人脸的特征点,然后通过旋转平移标准模型的特征点进行拟合,计算标准模型求得的特征点与Dlib获得的特征点之间的差,使用Ceres不断迭代优化,最终得到最佳的旋转和平移参数. A ...

  9. Ceres配置(vs2013+Win10)

    主要参考文:Ceres Solver 在Windows下安装配置笔记 eigen.gflags.glog.suitesparse按照上面的链接中的指导配置即可. 配置ceres的时候,按照上面的链接内 ...

随机推荐

  1. 税号输入框 将input框中的输入自动转化成半角大写

    这两天出了这么一个需求,输入税号的时候,需要自动将其转化为半角大写,并且阻止标点符号中文汉字的输入.(下面会有:全半角转换.文本框选中.光标位置判断.设置光标位置 这些内容) 然后我就开始了慢慢查找资 ...

  2. [看图说话] 基于Spark UI性能优化与调试——初级篇

    Spark有几种部署的模式,单机版.集群版等等,平时单机版在数据量不大的时候可以跟传统的java程序一样进行断电调试.但是在集群上调试就比较麻烦了...远程断点不太方便,只能通过Log的形式,进行分析 ...

  3. 每天一个linux命令(42)--traceroute命令

    通过traceroute 我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不 ...

  4. UCSC genome browser 个人track 安装

    处理基因组数据,很多时候我们会觉得直接看序列文件不够直观,如果绘图的话,把n多G把数据用画图出来不仅费劲,就算操作也不方便.因此我们可以用UCSC开发出的genome browser,可以直接把数据信 ...

  5. Eclipse打JAR包的使用

    编译Java代码你当然可以直接使用Javac,但对于大多同学还是使用Eclipse编辑器来得快捷.这篇文章来说说我使用Eclipse编译后的执行之路,走路许多弯路,看我一一道来. 演示系统的架构 首先 ...

  6. SQL server 数据库——数学函数、字符串函数、转换函数、时间日期函数

    数学函数.字符串函数.转换函数.时间日期函数 1.数学函数 ceiling()--取上限  select ceiling(oil) as 油耗上限 from car floor()--取下限 sele ...

  7. wemall app商城源码Android之支付宝通知处理类

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之处 ...

  8. Kubernetes 1.5安装

    Kubernetes从1.3开始引入kubeadm来试图简化其复杂的安装.但kubeadm至今仍不稳定,而且我个人觉得kubeadm反而麻烦,还不如直接用脚本或者其他自动化工具来安装来的利索.关于ku ...

  9. .NET的HTTP辅助类:RestSharp

    示例: var client = new RestClient("http://example.com");// client.Authenticator = new HttpBa ...

  10. idiom - Initialization-on-demand holder 延迟加载的单例模式

    参考:https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom idiom - 一个线程安全的.无需synchroniza ...