如何在Mac下编译Ceres IOS库(2.0.0版本) 一键编译!
前言
之前写了一版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文件夹下方便管理。
3.同时拷贝本机的Accelerate.framework到3rdParty文件夹下。需要注意的是,这个Accelerate.framework在编译过程中不会用到,只是后续在调用Ceres库的时候,如果调用一些大型矩阵计算方法时会自动关联这个framework用于加速,否则无法用这些方法。
编译Eigen3库
1.首先进入到刚刚下载好的Eigen目录下,如下图所示。
在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库
- 修改Ceres根目录下的CMakeLists.txt,这里主要是因为下载的Eigen3中的配置文件里的标签都是Eigen3而不是Eigen,所以需要把CmakeLists.txt中的Eigen全部换成Eigen3。如下图所示。
- 修改internal/ceres目录下的CMakeLists.txt文件,将target_include_directories改成include_directories。
- 在Ceres根目录下创建ios_build文件夹,进入该文件夹并创建build.sh脚本。
该脚本首先设定了编译所需的Eigen库路径
然后设定编译选项
最后将各平台生成的.a静态库合并成一个静态库。
完整脚本可以看下我的Github。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
最后运行sh build.sh开始编译,最终在同级目录下会生成libceres.a文件。
总结
- 下载我上传的Github项目到你的本机。
- 首先进入Eigen根目录下并运行 sh build.sh
- 然后进入Ceres的ios_build目录下,运行 sh build.sh,即可得到编译好的libceres.a文件。
- 最后在使用libceres.a时,需要把Accelerate.framework一并拷到你的工程下,否则无法使用。