无法使用mpich和gcc进行编译

时间:2017-04-03 17:35:35

标签: gcc mpi mpich mpic++

我已经使用gcc 4.8.3在centos上编译了mpich 3.2。一切似乎都很好。然后我写了一个简单的测试程序,

#include "mpi.h"
int main(int argc,char **argv)
{}

并使用mpic ++进行编译。然后错误返回,

/home/setups/mpich-3.2/build/lib/libmpi.so:对_intel_fast_memcpy' /home/setups/mpich-3.2/build/lib/libmpi.so: undefined reference to __ intel_sse2_strncmp'的未定义引用 /home/setups/mpich-3.2/build/lib/libmpi.so:对_intel_fast_memset' /home/setups/mpich-3.2/build/lib/libmpi.so: undefined reference to __ intel_sse2_strlen'的未定义引用

究竟出了什么问题?我很困惑,错误似乎与英特尔编译器有关,但我使用gcc通过命令编译mpich,

./configure --prefix=/home/setups/mpich-3.2/build/ CC=gcc CXX=gcc F77=gfortran FC=gfortran

我已将/home/setups/mpich-3.2/build/bin添加到PATH,将/home/setups/mpich-3.2/build/lib添加到LD_LIBRARY_PATH

mpicc -v显示:

mpicc for MPICH version 3.2
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/home/setups/gcc-4.8.3/build/libexec/gcc/x86_64-unknown-linux-gnu/4.8.3/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --prefix=/home/setups/gcc-4.8.3/build --with-gmp=/home/setups/gmp-6.1.2/build --with-mpfr=/home/setups/mpfr-3.1.5/build --with-mpc=/home/setups/mpc-1.0.3/build --disable-multilib
Thread model: posix
gcc version 4.8.3 (GCC)

2 个答案:

答案 0 :(得分:0)

您可以在open-mpi.org网站找到您的解决方案,以及建立MPI的常见问题解答。例如,第17项。

  

使用英特尔编译器套件构建Open MPI时常见的错误   是意外地将Intel C编译器指定为C ++编译器。   具体来说,最新版本的英特尔编译器重命名为C ++   编译器“icpc”(它曾经是“icc”,与C编译器相同)。   习惯于旧名称的用户倾向于将“icc”指定为C ++   编译器,然后在Open MPI构建的后期导致失败   进程因为C ++代码将使用C编译器进行编译。坏   事情发生了。解决方案是确保指定C ++   编译器是“icpc”,而不是“icc”。例如:

https://www.open-mpi.org/faq/?category=building

答案 1 :(得分:0)

  

/home/setups/mpich-3.2/build/lib/libmpi.so:对_intel_fast_memcpy的未定义引用'

这强烈建议使用英特尔编译器来构建mpich。

可能发生gcc/g++/gfortran不在PATH或您的环境指向英特尔编译器(例如CC=iccCXX=icpcFC=ifort