背景
- 在拿不到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
环境中即可。