PETSC 3.3 - 如何编译并拥有所有 libpetscSOMETHING.so 个文件?

PETSC 3.3 - How to compile and have all libpetscSOMETHING.so files?

我尝试使用此配置编译 PESTC:

./configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran --download-f-blas-lapack=1 --download-openmpi --with-shared-libraries

make PETSC_DIR=/tmp/petsc-3.3-p7 PETSC_ARCH=arch-linux2-c-debug all

但是在编译我的使用 petsc 的库时,即使我链接了所有 petsc 库,它在运行时也会抱怨:undefined symbol: _Z10VecGetSizeP6_p_VecPi,在内部进行一些搜索后,我遇到了一些 .so 我的 petsc 没有'构建,像 libpetscvec.solibpetscsnes.so.

这样的库

我还发现它会生成一些与这些未生成的库同名的 .mod(例如:/tmp/petsc-3.3-p7/arch-linux2-c-debug/include/petscsnes.mod)。

所以我不确定我是否缺少一个标志,该标志应该告诉编译器不要给我库,或者它们是否在某些外部包中,并且我应该安装 --download-SOMEPACKAGE.

这是 $PETSC_DIR/$PETSC_ARCH/lib 中生成的 .so 库:

libmca_common_sm.so
libmca_common_sm.so.1
libmca_common_sm.so.1.0.2
libmpi.so
libmpi.so.0
libmpi.so.0.0.4
libmpi_cxx.so
libmpi_cxx.so.0
libmpi_cxx.so.0.0.1
libmpi_f77.so
libmpi_f77.so.0
libmpi_f77.so.0.0.3
libmpi_f90.so
libmpi_f90.so.0
libmpi_f90.so.0.1.0
libopen-pal.so
libopen-pal.so.0
libopen-pal.so.0.0.0
libopen-rte.so
libopen-rte.so.0
libopen-rte.so.0.0.0
libopenmpi_malloc.so
libopenmpi_malloc.so.0
libopenmpi_malloc.so.0.0.0
libpetsc.so

这是我解决它的方法:

./configure --with-pic=1 \
        --with-x11=0 --download-openmpi=yes \
        --doCleanup=1 --useThreads=0 \
        --with-shared-libraries=1 --with-clanguage=Cxx \
        --with-c++-support --with-fc=0 --ignore-cygwin-link \
        --with-blas-lib="[$VENDOR_LIBS/intel/mkl/lib/intel64/libmkl_blas95_lp64.a,$VENDOR_LIBS/intel/mkl/lib/intel64/libmkl_intel_lp64.so,$VENDOR_LIBS/intel/mkl/lib/intel64/libmkl_core.so,$VENDOR_LIBS/intel/mkl/lib/intel64/libmkl_intel_thread.so,$VENDOR_LIBS/intel/lib/intel64/libiomp5.so]" \
        --with-lapack-lib="[$VENDOR_LIBS/intel/mkl/lib/intel64/libmkl_lapack95_lp64.a]"

所以,是的,我看到我缺少英特尔 MKL 库(这是错误的主要部分,但也是配置中传递的其余参数)。

我不确定这是否对其他人有用,因为这个库在很多情况下都有大量不同的配置。但是,嘿,谁知道...