将Homebrew编译的openmpi(或mpich2)链接到Homebrew的gcc

nat*_*lng 4 c homebrew gcc mpi gfortran

我是Homebrew的新手(我通常使用Macports,但我在第二台计算机上试用Homebrew),我希望安装openmpi(或mpich2)软件包.步骤如下(在安装了Xcode 6的Mac OS X Yosemite上执行):

brew install gcc
brew install openmpi
Run Code Online (Sandbox Code Playgroud)

但是,我怀疑链接可能是错误的,原因如下:

  1. 缺少/ usr/local/bin/gcc的符号链接:

    $ which gcc
    /usr/bin/gcc
    $ gcc --version
    Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1
    Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
    Target: x86_64-apple-darwin14.0.0
    Thread model: posix
    
    $ which gcc-4.9
    /usr/local/bin/gcc-4.9
    $ gcc-4.9 --version
    gcc-4.9 (Homebrew gcc 4.9.2) 4.9.2
    Copyright (C) 2014 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    Run Code Online (Sandbox Code Playgroud)
  2. mpicc可能已链接到Apple gcc:

    $ which mpicc
    /usr/local/bin/mpicc
    $ mpicc --version
    Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
    Target: x86_64-apple-darwin14.0.0
    Thread model: posix
    
    Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  1. 我如何获得/usr/local/bin/gcc符号链接?或者Homebrew是出于某种原因故意避免这种情况?例如,如果Homebrew正在使用Apple gcc编译其所有软件包,假设它在路径中,那么改变gcc-4.9的路径意味着Homebrew现在用gcc-4.9编译其软件包?

  2. Homebrew安装的Open MPI是否与Apple gcc(而不是Homebrew gcc)相关联?如果是,是否可以(或建议)更改链接?

  3. 或者,有必要修复这些联系吗?如果我选择不解决它,我会遇到某些问题吗?例如,我正在考虑使用ln -s强制创建/usr/local/bin/gcc符号链接.但这是个好主意(*)吗?

(*)我知道链接不同编译器创建的目标文件时可能会出现问题.因此,对于(1),(2)和(3),我希望找到一种避免组合的解决方案,我用不同的编译器创建目标文件(一些使用gcc-4.9,一些使用Apple gcc).

ilc*_*avo 5

您需要执行以下操作:

1)为自制软件添加环境变量(您也可以将这些行添加到您的~\.bashrc):

$ export HOMEBREW_CC=gcc-4.9
$ export HOMEBREW_CXX=g++-4.9
Run Code Online (Sandbox Code Playgroud)

2)openmpi从源代码重建并重新安装及其依赖项

$ brew reinstall openmpi --build-from-source
Run Code Online (Sandbox Code Playgroud)

3)最后你会得到一条消息:

==> Reinstalling open-mpi
==> Using Homebrew-provided fortran compiler.
This may be changed by setting the FC environment variable.
==> Downloading http://www.open-mpi.org/software/ompi/v1.8/downloads/openmpi-1.8.
Already downloaded: /Library/Caches/Homebrew/open-mpi-1.8.4.tar.bz2
==> ./configure --prefix=/usr/local/Cellar/open-mpi/1.8.4 --disable-silent-rules 
==> make all
==> make check
==> make install
Warning: open-mpi dependency gcc was built with a different C++ standard
library (libstdc++ from clang). This may cause problems at runtime.
  /usr/local/Cellar/open-mpi/1.8.4: 785 files, 23M, built in 41.2 minutes

$ mpicc --showme 
gcc-4.9 -I/usr/local/Cellar/open-mpi/1.8.4/include -L/usr/local/opt/libevent/lib -L/usr/local/Cellar/open-mpi/1.8.4/lib -lmpi
Run Code Online (Sandbox Code Playgroud)

在我的MacBook上,我与XCode 6.2发生了一些冲突,这些冲突按照这些说明解决了

如果要安装 mpich

$ unlink openmpi
$ brew unlink gcc
$ brew install homebrew/versions/gcc5
$ brew install mpich --build-from-source   
$ mpicc -v
mpicc for MPICH version 3.2
Using built-in specs.
COLLECT_GCC=gcc-5
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc5/5.4.0/libexec/gcc/x86_64-apple-darwin14.5.0/5.4.0/lto-wrapper
Target: x86_64-apple-darwin14.5.0
Configured with: ../configure --build=x86_64-apple-darwin14.5.0 --prefix=/usr/local/Cellar/gcc5/5.4.0 --libdir=/usr/local/Cellar/gcc5/5.4.0/lib/gcc/5 --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-5 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl014 --with-system-zlib --enable-libstdcxx-time=yes --enable-stage1-checking --enable-checking=release --enable-lto --disable-werror --with-pkgversion='Homebrew gcc5 5.4.0' --with-bugurl=https://github.com/Homebrew/homebrew-versions/issues --enable-plugin --disable-nls --enable-multilib
Thread model: posix
gcc version 5.4.0 (Homebrew gcc5 5.4.0) 
Run Code Online (Sandbox Code Playgroud)