无法使用mpich和gcc进行编译

无法使用mpich和gcc进行编译,gcc,mpi,mpich,mpic++,Gcc,Mpi,Mpich,Mpic++,我已经在centos上用GCC4.8.3编译了MPICH3.2。一切似乎都很好。然后我写了一个简单的测试程序 #include "mpi.h" int main(int argc,char **argv) {} 并使用mpic++进行编译。然后错误返回 /home/setups/mpich-3.2/build/lib/libmpi.so:对\u intel\u fast\u memcpy'的未定义引用 /home/setups/mpich-3.2/build/lib/libmpi.so:未定义

我已经在centos上用GCC4.8.3编译了MPICH3.2。一切似乎都很好。然后我写了一个简单的测试程序

#include "mpi.h"
int main(int argc,char **argv)
{}
并使用mpic++进行编译。然后错误返回

/home/setups/mpich-3.2/build/lib/libmpi.so:对
\u intel\u fast\u memcpy'的未定义引用
/home/setups/mpich-3.2/build/lib/libmpi.so:未定义对
\uuuuu intel\u sse2\u strncmp'的引用 /home/setups/mpich-3.2/build/lib/libmpi.so:对
\u intel\u fast\u memset'的未定义引用
/home/setups/mpich-3.2/build/lib/libmpi.so:未定义对
\uuuuu intel\uSSE2\u 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 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)

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

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


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

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

/home/setups/mpich-3.2/build/lib/libmpi.so:对_intel\u fast\u memcpy'的未定义引用

这有力地表明,构建mpich时使用了英特尔编译器

如果
gcc/g++/gfortran
不在
路径中,或者您的环境指向英特尔编译器(例如
CC=icc
CXX=icpc
FC=ifort
),则可能发生这种情况

/home/setups/mpich-3.2/build/lib/libmpi.so:对_intel\u fast\u memcpy'的未定义引用

这有力地表明,构建mpich时使用了英特尔编译器


如果
gcc/g++/gfortran
不在您的
路径中,或者您的环境指向英特尔编译器(例如
CC=icc
CXX=icpc
FC=ifort
),则可能发生这种情况。

如何设置路径?mpicc-v打印什么?哪个mpicc打印什么?如何配置MPICH?<代码> CXX/COD>是编译C++文件的程序,在你的例子中,代码> G++< /COD> @ VLADIMIF,我在路径中添加了MPICC的路径。mpicc-v似乎还不错。我已经在我的问题中添加了mpicc-v的输出。@阿拉什你的意思是我应该在配置中使用CXX=g++吗?我尝试了,但问题没有解决。请查看运行
/configure
脚本的同一文件夹中的
config.log
文件。在日志文件中查找任何与intel相关的内容。还要查找错误/警告。如何设置路径?mpicc-v打印什么?哪个mpicc打印什么?如何配置MPICH?<代码> CXX/COD>是编译C++文件的程序,在你的例子中,代码> G++< /COD> @ VLADIMIF,我在路径中添加了MPICC的路径。mpicc-v似乎还不错。我已经在我的问题中添加了mpicc-v的输出。@阿拉什你的意思是我应该在配置中使用CXX=g++吗?我尝试了,但问题没有解决。请查看运行
/configure
脚本的同一文件夹中的
config.log
文件。在日志文件中查找任何与intel相关的内容。还要查找错误/警告。