如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!

如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!

    • 前言
    • 准备工作
    • 编译Eigen3库
    • 编译Ceres 2.0.0 IOS库
    • 总结

前言

之前写了一版Ceres安卓库的博客https://blog.csdn.net/haejwcalcv/article/details/99334905
同样,对于IOS平台来说,Ceres库如何编译的资料也是比较少的,这次更新一篇如何在Mac平台下编译Ceres IOS的库,其实也是项目中用到的,这里进行一下总结方便以后大家用到时可以少踩一些坑。
由于Ceres2.0.0版本支持了App加速库,所以对于大型的矩阵运算不必再用SuiteSparse等第三方库繁多的配置也可以使用。而且实际看下来运算时间也还可以,但是否有suitesparse快目前还没有验证。
如果没有耐心看下面的记录,可以直接跳转我的github网址:https://github.com/PotterSu/libCeres_IOS
按照readme直接运行即可。

如有疑问欢迎留言,尽我所知回复大家。

准备工作

1.首先在Ceres Solver官方上下载Ceres源码包到本机上
https://github.com/ceres-solver/ceres-solver
2.在Eigen官网上下载Eigen源码包到本机上。
http://eigen.tuxfamily.org/index.php?title=Main_Page
这里建议在Ceres源码根目录下创建一个3rdParty文件夹,然后把Eigen源码放到3rdParty文件夹下方便管理。如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!_第1张图片
如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!_第2张图片
3.同时拷贝本机的Accelerate.framework到3rdParty文件夹下。需要注意的是,这个Accelerate.framework在编译过程中不会用到,只是后续在调用Ceres库的时候,如果调用一些大型矩阵计算方法时会自动关联这个framework用于加速,否则无法用这些方法。

编译Eigen3库

1.首先进入到刚刚下载好的Eigen目录下,如下图所示。
如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!_第3张图片
在Eigen根目录下创建build.sh脚本,该脚本用于一键编译Eigen,完整脚本如下。

#!/bin/sh
rm -r build

mkdir build
cd build

set -e

current_dir=$(cd `dirname $0`; pwd)
echo $current_dir

export OUT_ROOT_DIR="$current_dir/libEigen"

cmake ..
make
make install DESTDIR=$OUT_ROOT_DIR

打开终端,进入到build.sh同级目录下,运行sh build.sh即可开始Eigen编译。
出现如下图即编译成功。

编译Ceres 2.0.0 IOS库

  1. 修改Ceres根目录下的CMakeLists.txt,这里主要是因为下载的Eigen3中的配置文件里的标签都是Eigen3而不是Eigen,所以需要把CmakeLists.txt中的Eigen全部换成Eigen3。如下图所示。
    如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!_第4张图片
  2. 修改internal/ceres目录下的CMakeLists.txt文件,将target_include_directories改成include_directories
    如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!_第5张图片
  3. 在Ceres根目录下创建ios_build文件夹,进入该文件夹并创建build.sh脚本。
    该脚本首先设定了编译所需的Eigen库路径
    如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!_第6张图片
    然后设定编译选项
    如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!_第7张图片
    最后将各平台生成的.a静态库合并成一个静态库。
    rm -rf $current_dir/libceres.a
    ALL_ARCHS=(armv7 arm64 x86_64)
    lipo -create $BUILD_ROOT_DIR/${ALL_ARCHS[0]}/lib/libceres.a $BUILD_ROOT_DIR/${ALL_ARCHS[1]}/lib/libceres.a $BUILD_ROOT_DIR/${ALL_ARCHS[2]}/lib/libceres.a -output $current_dir/libceres.a
    
    完整脚本可以看下我的Github。
    最后运行sh build.sh开始编译,最终在同级目录下会生成libceres.a文件。
    如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!_第8张图片

总结

  1. 下载我上传的Github项目到你的本机。
  2. 首先进入Eigen根目录下并运行 sh build.sh
  3. 然后进入Ceres的ios_build目录下,运行 sh build.sh,即可得到编译好的libceres.a文件。
  4. 最后在使用libceres.a时,需要把Accelerate.framework一并拷到你的工程下,否则无法使用。

你可能感兴趣的:(Ceres相关)