前言
近期正在尝试调试配置数字图像相关开源项目DICe,过程中,由于在没有完全阅读完操作文档就直接开始配置环境,导致花费了很多时间绕了很多弯路。在这些弯路中,该项目由于依赖于sandia开发的一个求解大规模科学计算问题的软件包——Trilinos,最难走的莫过于对它的调试和配置,所幸最终还是将它调通,这里将经验进行分享,也为警醒自己调试开源项目时先把说明书看完再调,说不定已经有现成的编译脚本!!
Trilinos介绍
Trilinos是sandia开发的一个求解大规模科学计算问题的软件包,它集成了很多算法库,以解决大规模、复杂的多物理工程和科学问题。像线性代数相关的运算,这个包可以说是非常强大。
官网地址:https://trilinos.github.io/
官方配置方法:https://trilinos.github.io/getting_started.html
Github源码:https://github.com/trilinos/Trilinos
官方的配置介绍文档非常详细,但全英文且内容非常多,如果是熟练的开发者建议直接参考文档,如果是和我一样小白可以尝试用我的方法,避免一些我已经踩过的坑。
一.准备工作
- 更新软件包
sudo apt-get update
; - 安装git
sudo apt-get install git
; - 安装mpich并配置环境变量,详细操作请见ubuntu16.04一步一步安装配置mpich
- 安装cmakegit
sudo apt-get install cmake
; - 安装gfortran
sudo apt-get install gfortran
- 安装BLAS和LAPACK算法包的库
sudo apt-get install libblas-dev liblapack-dev
也可以直接安装LAPACK和BLAS的算法包,推荐使用vcpkg直接安装这两个算法包。
二.安装配置Trilinos
官方配置文档:https://trilinos.org/docs/files/TrilinosBuildReference.html
文档很长,其中大部分章节是在讲configure时候的命令,各个flag的描述及作用以及其依赖项,如果只是需要新增几个附加包可以直接参考的我的编译命令修改即可。
1.下载源码&新建Build文件夹
可以采用git的方式,或者是自行下载特定版本的源码进行解压。
git clone https://github.com/trilinos/Trilinos.git
cd Trilinos
mkdir build
cd build
2.Configure
以下是我的完整cmake命令,之后会进行分解说明(csdn代码片不能自动换行,所以就用这种方式展示了。。),也可以自己写cmake脚本进行执行,官方文档里也强烈建议这样操作
cmake . . .. .. -DCMAKE_INSTALL_PREFIX=$HOME/install/Trilinos -DTPL_ENABLE_MPI:BOOL=ON -DTrilinos_ENABLE_ALL_PACKAGES:BOOL=OFF -DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=ON -DTrilinos_ENABLE_TESTS:BOOL=ON -DTrilinos_ENABLE_EXAMPLES:BOOL=ON -DTrilinos_ENABLE_EpetraExt:BOOL=ON -DTrilinos_ENABLE_Epetra:BOOL=ON -DTrilinos_ENABLE_Teuchos:BOOL=ON -DTPL_ENABLE_BLAS:BOOL=ON -DTPL_ENABLE_LAPACK:BOOL=ON -DCMAKE_CXX_FLAGS:STRING="-O3" -DCMAKE_C_FLAGS:STRING="-O3" -DCMAKE_Fortran_FLAGS:STRING="-O5" -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/mpicxx -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/mpicc -DMPI_BASE_DIR:PATH="/usr/lib/openmpi" -DMPI_BIN_DIR:PATH="/usr/bin" -DMPI_EXEC_MAX_NUMPROCS:STRING=2 -DMPI_EXEC:FILEPATH=“mpirun” -DMPI_EXEC_NUMPROCS_FLAG:STRING=-np -DCMAKE_Fortran_COMPILER:FILEPATH=/usr/bin/gfortran -DBLAS_LIBRARY_NAMES:STRING=“blas” -DBLAS_LIBRARY_DIRS:PATH=/usr/lib/libblas -DLAPACK_LIBRARY_NAMES:STRING=“lapack” -DLAPACK_LIBRARY_DIRS:PATH=/usr/lib/lapack
#命令分解说明#
- (非必要项)install的生成路径,如果缺省则生成在本地文件夹中
-DCMAKE_INSTALL_PREFIX=$HOME/install/Trilinos
- (必要项)配置时附加包的情况,如果需要所有附加包,则把ALL_PACKAGES项改为ON,另一项OFF【这样大概率过不去,因为很多附加包依赖项会缺失】
-DTrilinos_ENABLE_ALL_PACKAGES:BOOL=OFF
-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=ON
- (非必要项)是否配置test工具,开启的话之后会在build文件夹中生成test文件夹便于测试生成情况,建议勾选
-DTrilinos_ENABLE_TESTS:BOOL=ON
- (非必要项)是否配置test工具,开启的话之后会在build文件夹中生成示例,建议勾选
-DTrilinos_ENABLE_EXAMPLES:BOOL=ON
- (必要项)需要配置的Trilinos自身软件包,根据需要进行设定,Trilinos所包含的包可参考官网的列表
-DTrilinos_ENABLE_EpetraExt:BOOL=ON
-DTrilinos_ENABLE_Epetra:BOOL=ON
-DTrilinos_ENABLE_Teuchos:BOOL=ON
- (必要项)需要配置的第三方软件包,根据需要进行设定,建议配置MPI、BLAS、LAPACK
-DTPL_ENABLE_MPI:BOOL=ON
-DTPL_ENABLE_BLAS:BOOL=ON
-DTPL_ENABLE_LAPACK:BOOL=ON
- (必要项)编译器相关配置,根据需要进行修改,但不要缺失
-DCMAKE_CXX_FLAGS:STRING="-O3"
-DCMAKE_C_FLAGS:STRING="-O3"
-DCMAKE_Fortran_FLAGS:STRING="-O5"
-DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/mpicxx
-DCMAKE_C_COMPILER:FILEPATH=/usr/bin/mpicc
-DCMAKE_Fortran_COMPILER:FILEPATH=/usr/bin/gfortran
- (必要项)第三方软件包依赖项配置,前面开启了什么第三方包,这里就需要配置对应的依赖,否则编译不通过
-DMPI_BASE_DIR:PATH="/usr/lib/openmpi"
-DMPI_BIN_DIR:PATH="/usr/bin"
-DMPI_EXEC_MAX_NUMPROCS:STRING=2
-DMPI_EXEC:FILEPATH="mpirun"
-DMPI_EXEC_NUMPROCS_FLAG:STRING=-np
#使用vcpkg安装的blas和lapack
-DBLAS_LIBRARY_NAMES:STRING="blas"
-DBLAS_LIBRARY_DIRS:PATH=/usr/lib/libblas
-DLAPACK_LIBRARY_NAMES:STRING="lapack"
-DLAPACK_LIBRARY_DIRS:PATH=/usr/lib/lapack
#使用apt-get安装的blas和lapack的库
-DBLAS_LIBRARY_NAMES:STRING="blas"
-DBLAS_LIBRARY_DIRS:PATH=/usr/lib/libblas.so.3
-DLAPACK_LIBRARY_NAMES:STRING="lapack"
-DLAPACK_LIBRARY_DIRS:PATH=/usr/lib/liblapack.so.3
3.Build&Install
上面编译配置通过后,会看到configure done;generate done的字样。接下来就可以使用下列命令进行生成
j4是指4个处理器进行生成,可以根据实际情况进行修改
make -j4
make -j4 install
完成之后,就可以在之前设定好的intall文件夹中看到安装好的Trilinos了。