前言
本篇文章为本人自己(Toniht)在实验室服务器上配置环境的一些记录,我也是个半吊子,很多步骤都不知其所以然,主打一个能用就行。主要目的是方便后续遇见问题及时定位,或者后续再次需要时不用上网到处查找。次要目的是希望能帮助到有需要的人。
写给参考的人:本篇文章中你可能会看见的一些地址中的昵称:Toniht为我本人昵称,tjx为名字缩写,因为实验室服务器分配需要记录,方便查人不让用昵称,所以本文中Toniht和tjx会比较混乱,但是都是我的id就对了。没说联网的,默认都是离线安装,即实验室电脑下载后,MobaXterm传到服务器上
by Toniht 2023.07.11
1. Cmake
Linux非管理员安装cmake以及所遇到的坑
记录时已经安装完成。
下载地址:https://cmake.org/download/
步骤来源于上面的教程,我的配置地址--prefix=/home/server/common/tjx/tools/cmake
$ tar -zvxf cmake-3.21.3.tar.gz
$ cd cmake-3.21.3
$ ./bootstrap
$ ./configure --prefix=/home/xxx/cmake !!!注意,要在自己用户名下的目录配置,如果不加--prefix会默认在root目录下配置,这样后面make install时没有sudo权限会失败
$ make
$ make install
2. eigen
安装完,又卸了
还得是管理员权限,因为是第一次用服务器不熟悉非root环境安装的流程,以为依赖也要靠自己,所以安装了很久,没想到最后还是删掉了,直接联系实验室的管理员帮忙安装了依赖。几分钟解决了我一天半硬是没搞明白的东西。
依赖安装
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
sudo apt-get install libeigen3-dev
记录时已经安装完成。
好像是换网址了?网上很多教程的下载地址都不行了。
新的网址:https://gitlab.com/libeigen/eigen
我的步骤(仅供参考):
我下载了老版本3.3.7,然后
$ tar -zvxf eigen-3.3.7.tar.gz
$ cd eigen-3.3.7
$ mkdir build && cd build
cmake时,因为默认好像是/usr/local/,因为服务器没有root权限,不改后面没法make install
$ cmake -DCMAKE_INSTALL_PREFIX=/home/server/common/tjx/tools/eigen ..
$ make install
3. ceres-solver
边搞边记录
下载地址:https://github.com/ceres-solver/ceres-solver/tags
我下载的是1.14.0版本
正常的话我认为cmake命令应该是正常执行的,但是报错了,报错以及解决方法见ERROR 3.1
管理员安装依赖后,一切都简单起来了,报错也没了。
$ tar -zvxf ceres-solver-1.14.0.tar.gz
$ cd ceres-solver-1.14.0
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/home/server/common/tjx/tools/ceres ..
ERROR 3.1
问题描述:
cmake报错,显示为找不到eigen3,但是上面已经正常安装了eigen3.3.7,有可能是eigen版本问题,但是我这里主要是找到的eigen地址不对劲。
报错中Could not find file: /home/server/common/tjx/include/eigen3/Eigen/src/Core/util/Macros.h
,对比后发现,我的eigen安装在了~/tools/eigen
,但是定位在了~/
。另外,经查,Macros.h文件也并不存在。
解决方法:
在ceres-solver-1.14.0/cmake/FindEigen.cmake文件中,找到了报错位置
先在FindEigen.cmake文件中找到
set(EIGEN_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE STRING
"Eigen include directory" FORCE)
并将其注释掉。防止后续传入参数时会被重新set为错误值。如图:
另外,经查,报错还有一个原因就是报错中的Macros.h文件,可能是因为是离线安装的,所以并不存在,我认为有两种解决方法:1. 注释掉读取Macros.h的代码,并将其EIGEN_VERSION直接设置为对应版本 2. 对应目录增加一个Macros.h文件,并加入版本信息
我选择了第二个,Macros.h文件内容:
#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 3
#define EIGEN_MINOR_VERSION 7
执行指令cmake -DCMAKE_INSTALL_PREFIX=/home/server/common/tjx/tools/ceres -DEIGEN_INCLUDE_DIR=/home/server/common/tjx/tools/eigen/include/eigen3 -DEIGEN3_INCLUDE_DIR=/home/server/common/tjx/tools/eigen/include/eigen3 ..
(其中CMAKE_INSTALL_PREFIX在设置ceres安装位置,EIGEN_INCLUDE_INCLUDE_DIR和EIGEN3_INCLUDE_DIR是在设置参数值)