8.1. 程序编译及安装

在使用或编译 SudoDEM 前,我们假定用户已配置好必要的运行时环境,包括Linux操作系统或 Windows Linux Subsystem(推荐Ubuntu)以及Python和一些基本Python库(例如numpy), 其他第三方库(例如Boost和Qt)可以在稍后进行安装。 SudoDEM 托管于 GitHub 。 我们将会给出两种 SudoDEM 的安装方式方便大家选择。

8.1.1. 二进制安装

第一步: 获取安装包

你可以从 这里 下载已经编译好的 SudoDEM 二进制程序 , 然后将该二进制包解压到任意文件夹 (例如, /home/xxx/)。 如果你已经下载了 SudoDEM 主程序,但是没有包含对应的第三方库,你需要再下载 "3rdlibs.tar.xz" 并将其解压在 SudoDEM 子文件夹 "lib" 中。你可以参考下文所示的 SudoDEM 文件结构:

../_images/dirtree.png

第二步: 设置环境变量 PATH

sudodem3d 安装路径(例如,’/home/xxx/SudoDEM/bin’)添加到环境变量配置文件中(例如,’/home/xxx/.bashrc’):

PATH=${PATH}:/home/xxx/SudoDEM/bin

8.1.2. 无root权限编译安装

  1. 目录树

在源代码文件解压后,你将会看到如下目录树

../_images/dirtree2.png

用户可以父文件夹下添加子文件夹, 例如, ‘3rdlib’, ‘build2d’, ‘build3d’和 ‘sudodeminstall’到 ‘SudoDEM’ 文件夹中。现在文件夹结构将会被更新如下:

../_images/dirtree3.png

子文件夹 ‘3rdlib’ 用于存放第三方库的文件。需要注明的是该文件夹不仅存放第三方库的头文件,同时还将存放第三方库库编译后的动态链接库文件 (’*.so.*’)。 在 ‘SudoDEM’ 编译完成后,用户需要手动将 ‘SudoDEM’ 所依赖的所有第三方库的对应文件拷贝到子文件夹 ‘3rdlib’ 中。’SudoDEM’ 的二维和三维版本的编译分别在 ‘build2d’ 和 ‘build3d’ 中进行,编译后的所有生成文件将会被安装在 ‘sudodeminstall’ 文件夹中。

  1. 编译第三方库

../_images/dirtree4.png

主要第三方依赖库:

  • Boost-1.67从 Boost 官方网站 下载 对应的源代码文件 或者可以选择从 github 下载

    1cd boost-1\_6\_7
    2./bootstrap.sh --prefix=$PWD/../boost167 --with-libraries=python,thread,filesystem,iostreams,regex,serialization,system,date_time link=shared runtime-link=shared --without-icu
    3./b2 -j3
    4./b2 install
    
  • Eigen-3.3.5: 无需安装但需要包含所有的头文件。 用户可以选择从我们提供的 github 仓库来 下载.

  • MiniEigengithub 仓库 下载 . 在 CMakeLists.txt’ 设置已经编译好的 Boost 的路径:

    1set(BOOST_ROOT "/home/yourusername/DEM/3rdlib/boost167")
    

    然后执行,

    1mkdir build
    2cd build
    3cmake ../
    4make
    

    编译完成后请拷贝文件 ‘minieigen.so’ 到 SudoDEM 子文件夹 ‘lib/3rdlibs/py’ 下面。

  • LibQGLViewer-2.6.3从 github 仓库 下载对应的源代码

    1cd QGLViewer
    2qmake
    3make
    

其他工具和依赖库参见源代码中的安装说明。

  1. 编译 SudoDEM 主程序

我们将在这一小节给出 SudoDEM3D 的编译示例。编译前请确认你的文件夹结构如下:

../_images/dirtree5.png

编译前用户需要修改 ‘CMakeLists.txt’ 用于 SudoDEM 安装路径以及第三方依赖库的路径设置。

  1. 设置安装路径
    1SET(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/../sudodeminstall/SudoDEM3D")
    
  2. 设置 Boost 库的路径
    1set(BOOST_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../3rdlib/boost167")
    
  3. igen库头文件设置
    1set(EIGEN3_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../Eigen")
    
  4. QGLViewer 的头文件以及动态链接库通过下面两行来设置
    1set(QGLVIEWER_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../3rdlib/libQGLViewer-2.6.3/")
    2set(QGLVIEWER_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/../3rdlib/libQGLViewer-2.6.3/QGLViewer/libQGLViewer.so")
    
  5. 若用户并为使用apt-get来安装numpy或者PyQt,则应将系统中安装的numpy和pyqt复制到路径 ./lib/3rdlibs/py 。或者可以在 cMake 文件夹下的FindNumPy.cmake文件中改变numpy的搜索路径
    1set(DPDIR "${CMAKE_CURRENT_SOURCE_DIR}/../dem2dinstall/SudoDEM/lib/3rdlibs/py/")
    

否则,用户可忽略该步骤。

编译并安装 SudoDEM3D:

1cd build3d
2cmake ../SudoDEM3D
3make -j3
4make install

‘sudodem3d’ 的二进制文件将会被安装在 ‘/home/xxx/SudoDEM/sudodeminstall/SudoDEM3D/bin/’ 路径下。 用户可将该路径添加到环境变量中 (‘/home/xxx/.bashrc’):

1PATH=${PATH}:/home/xxx/SudoDEM/sudodeminstall/SudoDEM3D/bin

编译后的 SudoDEM 文件夹结构如下所示:

../_images/dirtree6.png

注: SudoDEM 的安装将会覆盖除 ‘3rdlibs’ 以外的所有子文件夹。用户需要拷贝第三方库的编译文件 (boost, libQGLViewer, minieigen) 到 ‘3rdlibs’ 中。如果系统有关于 3rd-libraries 的报错, 用户则需要检查当前的文件夹结构是否如教程所示。

重要: 用户可通过脚本 ‘changerpath.sh’ 添加运行时动态链接库搜索路径。

1cd 3rdlibs
2cp /home/xxx/SudoDEM/scripts/changerpath.sh .
3chmod +x changerpath.sh
4./changerpath.sh

注: ‘changerpath.sh’ 将会为 ‘3rdlibs’ 下所有的第三方库添加动态链接库运行时搜索路径 ‘$ORIGIN’,同时为所有的 ‘3rdlibs/py/PyQt4’ 下的第三方库添加动态链接库运行时搜索路径 ‘$ORIGIN/../../’。

动态链接库运行时搜索路径将会为运行程序提供最高优先级的动态链接库寻址路径,以此来避免潜在的用户安装库和系统安装库的版本冲突问题。

我们给出了六个例子以期可以帮助新用户开始 SudoDEM 的学习。我们希望如下的几个例子可以帮助用户迅速开始 SudoDEM 的学习, 例子对应的脚本可从以下 github 仓库下载: