【问题标题】:Failed to compile using mpich and gcc使用 mpich 和 gcc 编译失败
【发布时间】:2017-08-28 16:34:55
【问题描述】:

我在 centos 上用 gcc 4.8.3 编译了 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'的引用

究竟出了什么问题?我很困惑,错误似乎与intel编译器有关,但我使用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)

【问题讨论】:

  • 如何设置路径? mpicc -v 打印什么? which mpicc 打印什么?你是如何配置 mpich 的?
  • CXX 是编译 C++ 文件的程序,在您的情况下为 g++
  • @VladimirF 我在 PATH 中添加了 mpicc 的路径。 mpicc -v 似乎没问题。我在我的问题中添加了 mpicc -v 的输出。
  • @Arash 你的意思是我应该在配置中使用 CXX=g++ 吗?我试过了,但问题没有解决。
  • 查看运行./configure 脚本所在文件夹中的config.log 文件。在日志文件中查找任何与英特尔相关的内容。同时查找错误/警告。

标签: gcc mpi mpich mpic++


【解决方案1】:

您可以在 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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      相关资源
      最近更新 更多