编译Ceres Solver共享库记录

编译生成的Ceres Solver只有静态库,这样每次生成可执行文件的时候都会把相关的代码包含一遍,可执行文件的尺寸较大。按照官方的说法,需要使用特别版本的 suitesparse 才能编译生成共享库。所以尝试在电脑上加入对应的软件源,但是这个软件源似乎是针对Ubuntu 14.04 的,各种尝试的结果都是失败。网上搜索很多人出现类似的情况,只能尝试手动编译 suitesparse。以下是手动编译 suitesparse 的记录

手动编译 suitesparse

根据其他人编译Ceres共享库失败的记录,发现其中提供的解决方案是手动编译安装 suitesparse 库,遂决定从之。这个网页提供的安装源代码是从官方版本中fork出来的。所以我分别尝试fork版本真正的官方版本

编译这两个版本都出现了

nvcc fatal   : Unsupported gpu architecture 'compute_60'

错误。经查是因为CUDA的版本不够(参见:网页1网页2网页3)。我的电脑上之前已经安装了 CUDA 9.0.176 版本,出现问题的原因是没有在初始化配置脚本中把 CUDA9.0 加入系统路径。因此在 .bashrc 中加入以下两句,刷新后重新编译,这次不再出现错误。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/lib64
export PATH=/usr/local/cuda-9.0/bin:$PATH

以下是如何安装 CUDA 的两个网页:
Cuda + cudnn 在Ubuntu18.04上的手动安装
Ubuntu 18.04 下搭建 CUDA 环境并安装 NVIDIA 显卡驱动


编译 Ceres

手动编译安装 suitesparse 后,重新编译 Ceres,依然只能生成静态库,没有生成动态库。暂时没有找到别的办法,最后生成的可执行程序大点就大点吧。

静态库链接后集合到可执行文件里,执行时的效率会高一些,关于动态库和静态库的区别参见:
Linux共享库、静态库、动态库详解
Linux下静态库、共享库的创建与应用


在 windows 下的安装见
Ceres Solver 在Windows下安装配置笔记
Ceres Solver 在Windows下安装配置笔记


经查,发现之所以没有编译生成共享库是 CMakeLists.txt 的设置中没有开启生成共享库。

option(BUILD_DOCUMENTATION "Build User's Guide (html)" OFF)
option(BUILD_EXAMPLES "Build examples" ON)
option(BUILD_BENCHMARKS "Build Ceres benchmarking suite" ON)
option(BUILD_SHARED_LIBS "Build Ceres as a shared library." OFF)

将其改成

option(BUILD_SHARED_LIBS "Build Ceres as a shared library." ON)

重新 cmake,make后生成了共享库文件 libceres.so
再次编译生成的可执行文件小多了,但是执行的时候提示找不到库文件,执行 ldconfig 后解决上述问题。

公式是否会出现额外空行的测试

if [[ $0 == 23 ]]; then
    echo Hello
fi

Visits: 566

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

*