遇到的问题:
Ubuntu 12.04 (也试过13.04),configure和make看起来正常,不过make install的时候,会有下面的错误:
installing /usr/local/lib/libphg.so
installing /usr/local/include/phg.h
installing /usr/local/include/phg/*.h
installing /usr/local/share/phg/config*.log
installing /usr/local/share/phg/Makefile.inc
installing /usr/local/bin/[nt]etgen2medit
installing /usr/local/bin/{dof_info,phg_debug,mirror}
make: *** [install] Error 1
试着编译example下的例子,有下面错误:
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `feenableexcept'
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `sqrt'
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `tan'
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `log'
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `feclearexcept'
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `tgamma'
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `exp'
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `sin'
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `pow'
/home/parallels/phg-0.9.0/src/libphg.so: undefined reference to `cos'
collect2: error: ld returned 1 exit status
make: *** [navier-stokes] Error 1
只有Navier-Stokes有错,其他都可以正常运行。
解决:Makefile中用到了PETSc,再查PHG手册,安装部分:
一些外部软件包,如 PETSc, HYPRE 和 SuperLU Dist 等需要用到 BLAS 或 LAPACK 库,其中PETSc 和 HYPRE 需要 LAPACK 和 BLAS, 而 SuperLU Dist 则仅需要 BLAS。如果希望在 PHG 中同时使用这些包,则它们必须引用相同的 BLAS 和 LAPACK。
运行 configure 时如果启用了 PETSc, 则 PHG 会自动从 PETSc 中获取有关 BLAS 和 LAPACK的信息,此时用户不用在命令行上指定 BLAS 和 LAPACK 库 (如果指定反而可能出错)。
如果没有安装或启用 PETSc, 则用户可以通过 configure 的选项来指定 BLAS 或/和 LAPACK库。下面是一些指定 BLAS/LAPACK 库的例子:
./configure --disable-petsc --with-blas=-lgoto --with-lapack=-llapack
./configure --disable-petsc \
--with-lapack="-L/opt/intel/mkl/lib/32 -lmkl_lapack -lmkl_def -lguide"
(注:可以用 --with-lapack 同时指定 BLAS 和 LAPACK 库,但不应该用 --with-blas 来指定 LA-PACK 库)。
上面--with-blas=-lgoto类似与gcc参数,lgoto为库文件的名称,比如我们放在/usr/local/lib 和 /usr/lib 下的是librefblas.a, 这里就要换成 --with-blas=-lrefblas
当没有安装或启用 PETSc 并且用户没有指定 BLAS/LAPACK 库时,configure 会试图自动寻找适当的 BLAS/LAPACK 库。如果找到,则显示出 (并使用) 找到的库。如果找不到,则给出一条警告信息。
如果使用 Fedora Linux 并且没有其它合适的 BLAS/LAPACK 库时,可以考虑安装 lapack-devel和 blas-devel 包。
然后安装Lapack,具体安装过程如下:
安装lapack
1)
2)
3)
4) gedit
如果之前没安装blas:
将
include
all:
lib:
#lib:
clean:
.
修改成:
include
all:
#lib:
lib:
clean:
.
保存
6)
7)如果机群允许复制。复制blas_LINUX.a lapack_LINUX.a和tmglib_LINUX.a则三个文件到/usr/lib和/usr/local/lib两个文件夹中,并改名为:libblas.a liblapack.a和libtmglib.a。不能复制的话到6)结束。
(http://blog.sina.com.cn/s/blog_7eb8a69a01014onk.html)
上面(7)在机器上,实际是librefblas.a, liblapack.a, libtmglib.a ,并且不需要重新命名。