实验室服务器 环境配置记录

前言

本篇文章为本人自己(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是在设置参数值)

4. Sophus

Slambook2中的ch4需要使用Sophus,但是有些疑惑我一直没有解决,一起记录在这里吧。
首先根据网上教程安装fmt

# 目前位于目录3rdparty
$ git clone  https://github.com/fmtlib/fmt.git
$ cd fmt
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/home/server/common/tjx/tools/fmt ..
$ make
$ make install
$ cd ../.. # 返回3rdparty目录
$ git clone https://github.com/strasdat/Sophus.git
$ cd Sophus
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/home/server/common/tjx/tools/Sophus ..
$ make
$ make install

Q1:
报错
在ch4/build目录下执行cmake …时报错如下:

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /home/server/common/tjx/tools/cmake/share/cmake-3.25/Modules/CMakeFindDependencyMacro.cmake:47 (find_package):
  By not providing "Findfmt.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "fmt", but
  CMake did not find one.

  Could not find a package configuration file provided by "fmt" (requested
  version 10.0.1) with any of the following names:

    fmtConfig.cmake
    fmt-config.cmake

  Add the installation prefix of "fmt" to CMAKE_PREFIX_PATH or set "fmt_DIR"
  to a directory containing one of the above files.  If "fmt" provides a
  separate development package or SDK, be sure it has been installed.
Call Stack (most recent call first):
  /home/server/common/tjx/workspace/slambook2/3rdparty/Sophus/build/SophusConfig.cmake:20 (find_dependency)
  CMakeLists.txt:7 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/server/common/tjx/workspace/slambook2/ch4/build/CMakeFiles/CMakeOutput.log"

解决方法:
修改ch4/CMakeLists.txt文件
报错显示Add the installation prefix of "fmt" to CMAKE_PREFIX_PATH or set "fmt_DIR" to a directory containing one of the above files. 因此为fmt设置PREFIX_PATH,在CMakeLists.txt中添加list(APPEND CMAKE_PREFIX_PATH "/home/server/common/tjx/tools/fmt")
修改后的CMakeLists.txt文件

cmake_minimum_required(VERSION 3.0)
project(useSophus)

list(APPEND CMAKE_PREFIX_PATH "/home/server/common/tjx/tools/fmt")

# 为使用 sophus,需要使用find_package命令找到它
find_package(Sophus REQUIRED)

# Eigen
include_directories("/usr/include/eigen3")
add_executable(useSophus useSophus.cpp)
target_link_libraries(useSophus Sophus::Sophus)

add_subdirectory(example)

Q2:
报错
执行make时报错,报错信息:

[ 25%] Building CXX object CMakeFiles/useSophus.dir/useSophus.cpp.o
[ 50%] Linking CXX executable useSophus
[ 50%] Built target useSophus
[ 75%] Building CXX object example/CMakeFiles/trajectoryError.dir/trajectoryError.cpp.o
/home/server/common/tjx/workspace/slambook2/ch4/example/trajectoryError.cpp:5:10: fatal error: sophus/se3.hpp: No such file or directory
 #include <sophus/se3.hpp>
          ^~~~~~~~~~~~~~~~
compilation terminated.
example/CMakeFiles/trajectoryError.dir/build.make:75: recipe for target 'example/CMakeFiles/trajectoryError.dir/trajectoryError.cpp.o' failed
make[2]: *** [example/CMakeFiles/trajectoryError.dir/trajectoryError.cpp.o] Error 1
CMakeFiles/Makefile2:125: recipe for target 'example/CMakeFiles/trajectoryError.dir/all' failed
make[1]: *** [example/CMakeFiles/trajectoryError.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

解决方法:
修改ch4/example/CMakeLists.txt文件
增加Sophus包
修改后的CMakeLists.txt

option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF)
find_package(Pangolin REQUIRED)
find_package(Sophus REQUIRED)
if(USE_UBUNTU_20)
    message("You are using Ubuntu 20.04, fmt::fmt will be linked")
    find_package(fmt REQUIRED)
    set(FMT_LIBRARIES fmt::fmt)
endif()
include_directories(${Pangolin_INCLUDE_DIRS})
add_executable(trajectoryError trajectoryError.cpp)
target_link_libraries(trajectoryError ${Pangolin_LIBRARIES} Sophus::Sophus ${FMT_LIBRARIES})

疑问
为什么同样是make安装的Sophus和Pangolin,在find_package时,Pangolin正常的使用对应参数LIBRARIES和INCLUDE_DIRS而Sophus的是空的?网上的别人的教程却是正常使用这两个参数。
是因为我在Cmake的时候设置了安装位置的原因吗?

g2o

同样下载了slambook2对应的3rdparty中的g2o,并执行以下指令

mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/home/server/common/tjx/tools/g2o
make
make install

很好,又忘记版本问题了,23版的会报错,和之前的可能是Pangolin使用的c++版本不同,make的时候会报错,17版的也不行,g2o里有些函数17版没有,只能使用20版的。一共三个选项,我尝试了三遍才成,不愧是我。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
从实际教学需要出发,采用科学的管理思想和先进的开发技术,将实验室管理以及实验数据通过计算机网络互连,实现以实验室为核心的整体环境的全方位管理。即集教学管理、数据管理、设备管理、实验管理、成绩管理、实验预约、查询与统计等诸多模块为一体,组成一套比较完整的实验室综合管理体系,实现教学管理效率和教学资源效益的最大化。   各专业的学生根据各自教学计划及实验室开放时间安排,在网上进行实验预约,形成预约记录。通过系统的实验任务管理子系统安排好各位教师的实验课表。学生按预约记录上课。在课程结束后,教师根据学生平时的学习和实验情况综合给出该生的实验成绩,同时打印出标准的成绩单及分析单。   将整个设计系统安装在一台专用服务器上,采用WWW访问的模式进行访问,并以校园“一卡通”的兼容方式进行服务与管理。该访问模式打破时间和空间的限制,只要有计算机网络,学生可在任何时候任何地点进行实验预约、成绩查询、实验任务查询;教师可在任何时间任何地点答疑、批阅,了解学生的学习情况;教学管理部门可以在任何时间任何地点了解教学进度,监控教学情况,管理学生成绩。 1. 基于.NET技术环境下开发, 基于Web的B/S模式的系统三层结构,即由表示层、功能逻辑层和数据访问层组成。表示层主要完成向用户展现数据,为用户提供数据操作界面。通过表示层,用户可以完成系统配置、实验预约等操作。   功能逻辑层起到了承上启下的作用,当用户请求操作时,表示层通过调用功能逻辑层中的相应方法,来完成对数据的操作。   数据访问层是动作的发起者,由它来直接与数据访问层通讯,最终将数据库的数据展现、提交、返回给页面逻辑层,数据访问层位于最下层,主要完成数据库的直接操作,如添加、删除、插入和更新等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值