ceres交叉编译

        交叉编译这个事麻不麻烦主要还是看库作者资料给的全不全,ceres依赖库比较多,网上ceres交叉编译文章太少了,刚好前段时间自己试着用ceres在rk3308的板子上实现了回环的效果,在这里记录一下自己遇到的一些问题以及解决方法。

        编译ceres一般有两种方法,一个是使用cmake-gui可视化界面网上有介绍不赘述,不过在我使用cmake-gui过程中一直配置不了lapack路径,不太好用,我这里使用的是直接修改cmake_list去编译

        首先说下不带suitesparse的ceres编译,这个比较简单不管是使用cmake-gui还是修改cmake_list,都能很容易成功,这里说下怎么修改cmake_list,由于这部分代码主要都是c、c++,所以只需要指定c 、c++编译器以及系统环境即可:

SET(CMAKE_SYSTEM_NAME Linux)
SET(TOOLCHAIN_DIR "/home/yc/rockchip_rk3308_addFortran_0804_sdk")
SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-rockchip-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-rockchip-linux-gnu-g++)

        如果要使用稀疏矩阵优化,那就比较麻烦了,主要是,ceres依赖suitesparse,而suitesparse又依赖lapack和blas,我们分开说。

        lapack/blas:看网上有文章说使用openbals,我试了一下没成功,应该是我自己问题,不过suitesparse官方文档也说了建议不要使用openblas。我使用的是lapack-release-lapack-3.8.0,因为自带了blas,编译方法同上面不过要注意添加Fortran的编译器路径,如果你的sdk没有Fortran,则需要自己编译一下。

suitesparse:

修改suitesparseconfig.mk:
f77=aarch64-rockchip-linux-gnu-gfortran
CUDA=no
拷贝lapack blas库到lib文件夹下
LDLIBS += -lgfortran
编译
AUTOCC=no CC=/home/yc/rockchip_rk3308_addFortran_0804_sdk/bin/aarch64-rockchip-linux-gnu-gcc CXX=/home/yc/rockchip_rk3308_addFortran_0804_sdk/bin/aarch64-rockchip-linux-gnu-g++ F77=/home/yc/rockchip_rk3308_addFortran_0804_sdk/bin/aarch64-rockchip-linux-gnu-gfortran make library
如果缺少什么库,编译好后放在lib下,就能找到了
提示fortran mpfr(mpfr版本最好大于4.0)一些看不懂的库,可以看看是不是sdk缺失,上面都是我自己的路径,换成你们自己的就好了。

ceres编译: 
        分别修改每个xxxfind.cmake,set 路径一般都能找到了有些引用第三方库,在find_packge时候会默认去找cmake/module/findxxx.cmake,导致找不到安装路径可以删掉此处的findcmake,然后会去寻找xxxconfig.cmake ,set 一下路径应该就能找到了,然后像编译其他库一样编译就行了。
        suitesparse里面仿照component写一个blas的这样就能使能suitesparse了,中间提示test example错误,可以关掉option 里的tset example。中间提示test example错误,可以关掉option 里的tset example,因为你编译的exe只能运行在最终的目标环境下,跟你电脑上的linux系统是有区别的。

        交叉编译相当磨人,也在这个过程学习到很多,如果还有什么不清楚的可以下面评论,这个方法我是重复试验过可行的,编译的库也在机器上运行,实现了回环的效果。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值