背景
- 在拿不到sudo权限的linux服务器上要安装环境是非常麻烦的一件事情(意味着无法写入除了
/home以外的其他根目录(如\usr,\etc等),也无法通过sudo apt-get install xxx来安装各种程序包,非常麻烦!),这里主要记录如何编译安装matterport3D Sim,opencv和jsoncpp. - 基于Centos系统的超算中心很多库和依赖的安装方式是有异于ubuntu的,要格外注意安装相关依赖时的查询方式。
- 常规安装
matterport sim的过程请参见这篇博客。 - 友情提示:本文到最后还是联系了服务器管理员在sudo模式下装好了
OpenGL的相关依赖,所以本篇攻略仅供参考。
1. 编译安装OpenCV
- 首先到opencv官网下载所需的版本,我以3.4.16为例;
- 在
/home目录下新建一个文件夹,用于一会作为opencv安装的目标目录,这里我的目录是~/env_install/opencv; - 在服务器端解压(假设解压出来的目录就是
~/opencv-3.4.16); ctrl+T打开终端,新建build目录并进入:
cd opencv-3.4.16
mkdir build && cd build
- cmake (注意,这里我默认编译的是支持openGL)重点就是要替换这里的
CMAKE_INSTALL_PREFIX到刚才第2步新建的目录下:
sudo cmake -D WITH_OPENGL=ON -D WITH_GTK_2_X=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=~/env_install/opencv..
稍作等待……
6. 编译:
make -j8
如果CPU核少的话就调小-j后面的数字
7. 安装:
make install
- 添加路径:
vi ~/.bashrc
输入:在文件末尾加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:~/env_install/opencv/lib64/pkgconfig
export PKG_CONFIG_PATH
Esc+:wq保存退出后,在终端输入:source ~/.bashrc
8. 检验opencv是否安装成功:
pkg-config opencv --modversion
如果出现安装opencv的版本号即成功√。
2. 安装Matterport3D Sim
- 具体步骤我就不过多介绍了,大家可以点击这篇博客。
- 因为opencv没有安装在默认目录下,因此在
cmake这步时会报错说找不到opencv的错误,此时只需要在CMakeLists.txt第17行的find_package(OpenCV REQUIRED)前添加如下一行路径申明即可:
set(OpenCV_DIR "~/opencv-3.4.16/build")
- 然后就可以找到opencv了。然而此时又会遇到下一个错误:
Package 'jsoncpp', required by 'virtual:world', not found
这个错误如果有sudo权限是很好处理的,只需要sudo apt-get install libjsoncpp-dev就可以了。但是问题在于我们现在没有sudo权限!
-
编译安装jsoncpp:
- 可以参考这篇文章:Linux下编译安装JsonCpp(1.9.4)最新版本
- 新建一个
jsoncpp目录,然后在该目录下获取jsoncpp源码:wget https://github.com/open-source-parsers/jsoncpp/archive/master.tar.gz - 解压:
tar zxvf master.tar.gz解压得到文件夹:jsoncpp/ - 注意,这里就在
jsoncpp/同级目录下,新建一个build目录:jsoncpp-build。不要进入jsoncpp/下! 然后cd进jsoncpp-build/ - 执行Cmake:
cmake CMakeLists.txt完成后make -j8,然后make install - 完成后可以看到
jsoncpp-build/的同级目录下出现了include/和lib64/目录。例如这里我的路径就是~/env_install/jsoncpp/include。 - 添加路径:
vi ~/.bashrc
添加如下内容后,保存退出,然后source ~/.bashrc
export CMAKE_PREFIX_PATH=~/env_install/jsoncpp:$CMAKE_PREFIX_PATH export PKG_CONFIG_PATH=~/env_install/jsoncpp/lib64/pkgconfig:$PKG_CONFIG_PATH -
编译安装GLM
- 可以参考这篇文章:ubuntu环境通过CMake安装glm
- 安装完成后会出现目录
~/env_install/glm(我的环境中),其中包含include, lib64, share三个文件夹。这里的路径就是后续直接修改头文件引用的路径!
-
再往后继续编译安装
Matterport3D Sim,但是又继续报错:没有epoxy库,找不到openGL依赖……好吧这两个没有sodu权限安装就比较困难了,遂放弃,还是联系了服务器管理员帮忙安装。但是因为系统是centos的,所以在安装openGL时遇到一些困难,主要表现在找不到/usr/lib/x86_64-gnu/libGL.so这个文件。
-> 关键解决方法: 在gpu节点下cmake(我的环境中临时切换gpu节点指令如下,不通用:srun -p L40 -n 1 --gres=gpu:l40:8 --pty /bin/bash),且注意centos似乎是默认安装openGL在usr/lib/下,要么就联系管理员做下软链接。 -
修改
Matterport3DSimulator/的include/MatterSim.hpp,和include/NavGraph.hpp,将其中所有关于opencv2,jsoncpp和glm的头文件都改成绝对路径(或者也可以通过修改系统路径的方式让gcc可以找到这些库的头文件,但是我没走通这条路就搁置了),例如:#include </xxx/env_install/opencv/include/opencv2/opencv.hpp> #include </xxx/env_install/glm/include/glm/glm.hpp> #include </xxx/env_install/jsoncpp/include/json/json.h> -
然后在
build/目录下终端运行以下命令:
cmake -D OPENGL_opengl_LIBRARY=/usr/lib/x86_64-gnu/libGL.so -D PYTHON_EXECUTABLE=~/.conda/envs/xxx/bin/python -DEGL_RENDERING=ON ..
- make:
make -j8 - 不报错的话就编译通过了。再把生成的两个
.so文件复制到conda的site-packages环境中即可。










