我正在尝试使用带有--enable-mpi标志的Linux集群上安装fftw-2.1.5库,但我没有这样做。 我需要fftw版本2.1.5,因为GADGET2代码需要该版本,支持mpi。
首先,我安装了mpich-3.0.4:
cd ~/mpich-3.0.4
./configure --prefix=$HOME --enable-shared
make
make install
然后我编辑了我的.bashrc文件,添加:
export LD_LIBRARY_PATH="$HOME/lib"
PATH=$PATH:$HOME/bin
然后我尝试安装ffw:
./configure --prefix=$HOME/test --enable-mpi LDFLAGS=-L$HOME/lib CPPFLAGS=-I$HOME/include
但是我收到了一条错误消息:
checking for mpicc... mpicc
checking for MPI_Init... no
checking for MPI_Init in -lmpi... no
checking for MPI_Init in -lmpich... no
configure: error: couldn't find mpi library for --enable-mpi
我的所有mpi测试程序都可以运行,我可以在/ usr / local上安装笔记本电脑上的所有内容。我试图搜索问题,但我发现我需要启用LDFLAGS和CCPFLAGS,我已经这样做了。
任何人都知道如何解决这个问题?
编辑: 按照弗朗西斯的建议,我使用了CFLAGS而不是CPPFLAGS,我通过了./compile部分。但是我在make期间收到了另一个错误:
/opt/ibmcmp/vac/11.1/bin/.orig/xlc: 1501-208 (S) command option D is missing a subargument
这似乎是与ibm编译器(xlc)相关的问题。
EDIT2: 解决方法是将mpicc作为正确的编译器传递给./configure,并带有CC标志。
对于记录,正确的命令是:
./configure --prefix=$HOME --enable-mpi --enable-type-prefix --enable-float LDFLAGS=-L$HOME/lib CFLAGS=-I$HOME/include CC=mpicc
(type-prefix和float是GADGET2所需的额外选项)
答案 0 :(得分:0)
这是一个非常的旧线程,但我目前正在使用完全相同的环境,上面提供的解决方案本身并没有解决我的问题。然而,我对它的小附录——最终解决了我的问题——在未来可能仍然对其他人有用。 (另外,我对 GNU/Linux 还很陌生,所以我的回答对其他人来说可能微不足道。我事先对此感到抱歉。)
一周未能使用本地安装的 MPI(在我的情况下为 OpenMPI 3.1.3)安装 FFTW 2.1.5 和 3.3.9,同时不断回顾这个线程(和许多其他线程),我的工作解决方案“发现”完全违反直觉(至少对我来说,再次)。
原帖和编辑中的解决方案和细致的细节是必要的,但它们只需要一点点注释就足够了。这就是我首先写这个答案的原因。您必须按照原始答案中 EDIT2 中的说明运行 FFTW2 和 FFTW3 的配置。
对于 FFTW2,命令是
./configure --prefix=/path/to/install \
--enable-mpi \
--enable-type-prefix \
--enable-float \
LDFLAGS=-L/path/to/mpi/lib CFLAGS=-I/path/to/mpi/include \
CC=mpicc
而对于 FFTW3 来说是
./configure --prefix=/path/to/install \
--enable-mpi \
--enable-float \
LDFLAGS=-L/path/to/mpi/lib CFLAGS=-I/path/to/mpi/include \
CC=mpicc
(FFTW3 没有 --enable-type-prefix
标志,前缀在任何情况下都会自动写入每个 FFTW3 标头的开头)
注意:在我的情况下,将编译器明确指定为 CC=mpicc
对于 FFTW2 和 FFTW3 来说都是多余的,但对其他人来说可能是必要的。
$PATH
在最初的讨论中,其他人正确地提到,为了使用本地安装的头文件和二进制文件,您必须分别将它们添加到 $LD_LIBRARY_PATH
和 $PATH
。当然,MPI 也是如此。 但是。至于我自己,Linux 新手,发现它的方法很艰难,仅靠这些信息是不够的。毫无疑问 - 并且不知道我即将为初学者进行为期一周的 Linux 地狱之旅 - 我将 $PATH
和 $LD_LIBRARY_PATH
变量更新为
PATH=$PATH:/path/to/mpi/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/mpi/lib
export $PATH
export $LD_LIBRARY_PATH
在会话结束时,这些变量将不复存在,因此您必须在此会话中使用它们,或者通过将这些行添加到您的 ~/.bashrc
(或相应的 {{1 }} 您正在使用的外壳的文件)。我已经完成了上述所有操作,并且... FFTW 仍然不会检测到 MPI 库...
你看,上面的命令是完全有效的,这是你通常向这些变量中的任何一个添加路径的方法之一。我们都做过很多次了。我不熟悉 FFTW 的内在本质,但事实证明,如果您将 ~/...rc
放在 path/to/mpi/...
或 $PATH
的末尾,它根本找不到它们。我不知道为什么,我什至不知道,这是否是一种常见和微不足道的行为,所以不要问我这个特殊的异常。因此,如果您在完成上述所有操作后仍然遇到同样的问题,只需只需在您的路径和动态库路径的开头添加 MPI,如下所示:
$LD_LIBRARY_PATH
是的。经过一周的不断试错,为 GADGET2 和 GADGET4 以及其他软件设置环境,这个小小的改变就是解决方案。