Ceres Solver for android

最近开发中,需要对图片做一些处理与线性技术,这时就用到了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

时间: 2024-10-17 05:47:05

Ceres Solver for android的相关文章

Ceres学习

Ceres Solver是谷歌2010开始就使用的解决优化问题的C++库,并且在2014年开源. 在SLAM领域优化问题还可以使用g2o来求解.不过Ceres提供了自动求导功能,虽然是数值求导,但是有时可以避免复杂的雅克布计算,目前来看Ceres相对于g2o的缺点仅仅是依赖的库多一些(g2o仅依赖Eigen),详细的介绍可以参考google的文档:http://ceres-solver.org/features.html \rho_i\left(\left\|f_i\left(x_{i_1},.

[Android Pro] AndroidX重构和映射

原文地址:https://developer.android.com/topic/libraries/support-library/refactor https://blog.csdn.net/chen_xi_hao/article/details/81741486 AndroidX重构 未与Android操作系统捆绑在一起的API包将被重构到新的androidx命名空间中.只有包名和Maven工件名受到影响; 原来的类名,方法名和字段名不会更改.有关AndroidX重构的更多信息,请参阅博客

3D图形处理库

转自 3D图形处理库 高性能软件光栅化渲染器 OpenSWR OpenSWR —— 用于OpenGL的高性能,高度可扩展的软件光栅化渲染器 OpenSWR的目的是提供一个高性能,高度可扩展的OpenGL兼容软件光栅化渲染器,允许使用未经修改的可视化软件. ... 全新 3D 可视化库 ECharts-X ECharts-X是 ECharts 团队推出的全新 3D 可视化库,它是基于 ECharts 的扩展,底层深度整合了 WebGL 库QTEK和 Canvas2D 库ZRender. 特色 混搭

VINS(一)简介与代码结构

VINS-Mono和VINS-Mobile是香港科技大学沈劭劼团队开源的单目视觉惯导SLAM方案.是基于优化和滑动窗口的VIO,使用IMU预积分构建紧耦合框架.并且具备自动初始化,在线外参标定,重定位,闭环检测,以及全局位姿图优化功能. 方案最大的贡献是构建了效果很好的融合算法,视觉闭环等模块倒是使用了较为常见的算法. 系列博客将结合课题组发表的paper,从代码层面,逐步剖析系统的各个模块,达到对单目VIO整体的把握,帮助自己理解各类算法,并开发出针对应用场景的视觉惯导SLAM系统.最终目标是

谷歌Cartographer学习(1)-快速安装测试

个人理解错误的地方还请不吝赐教,转载请标明出处:http://www.cnblogs.com/hitcm/   代码放到个人github上,https://github.com/hitcm/ 如下,需要安装3个软件包,ceres solver.cartographer和cartographer_ros 1.首先安装ceres solver,选择的版本是1.11,路径随意. git clone https://github.com/hitcm/ceres-solver-1.11.0.git cd

Rplidar学习(五)—— rplidar使用cartographer_ros进行地图云生成

一.Cartographer简介 Cartographer是google开源的通用2D和3D定位与地图同步构建的SLAM工具,并提供ROS接口.官网地址:https://github.com/googlecartographer 二.安装方法 1.安装全部依赖项 sudo apt-get update sudo apt-get install -y cmake g++ git google-mock libboost-all-dev libeigen3-dev libgflags-dev lib

视觉slam十四讲ch6曲线拟合 代码注释(笔记版)

1 #include <opencv2/core/core.hpp> 2 #include <ceres/ceres.h> 3 #include <chrono> 4 5 using namespace std; 6 7 // 代价函数的计算模型 8 struct CURVE_FITTING_COST 9 { 10 CURVE_FITTING_COST ( double x, double y ) : _x ( x ), _y ( y ) {} 11 // 残差的计算

ubuntu下安装运行colmap

从源码安装 colmap可以在主流的系统windows,mac,linux安装 从github上获取colmap的最新源码 git clone https://github.com/colmap/colmap 安装教程如下 Linux Recommended dependencies: CUDA. 1. 安装依赖包 $ sudo apt-get install openjdk-8-jdk git python-dev python3-dev python-numpy python3-numpy

4.算法调试

cartographer是一个复杂的系统,调试需要对内部工作有很好的理解.下面将给出cartographer所使用的子系统以及不同的配置值的一个直观的概览.如果想进一步了解cartographer需要参考cartographer的论文.但论文中之定义了2D slam,大部分概念在这里都有介绍,且在3D slam中概念类似. W. Hess, D. Kohler, H. Rapp, and D. Andor, Real-Time Loop Closure in 2D LIDAR SLAM, in