使用 mpicxx 时由于 _noalias 导致 OpenMPI 构建失败

Build failure of OpenMPI due to _noalias when using mpicxx

我尝试在我的部门机器上使用 11Aug17 的较新版本安装 lammps。但是,mpicxx 给出以下行的错误:

mpicxx -g -O3   -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64  -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1   -I/home/shixx597/codes/kim-api-v1.7.3/lib/kim-api-v1/include  -c ../pair_list.cpp
../pair_list.cpp(88): error: expected a ";"
    const dbl3_t * _noalias const x = (dbl3_t *) atom->x[0];
                            ^

../pair_list.cpp(89): error: "restrict" has already been declared in the current scope
    dbl3_t * _noalias const f = (dbl3_t *) atom->f[0];
             ^

../pair_list.cpp(89): error: expected a ";"
    dbl3_t * _noalias const f = (dbl3_t *) atom->f[0];
                      ^

../pair_list.cpp(114): error: identifier "x" is undefined
      const double dx = x[i].x - x[j].x;
                        ^

../pair_list.cpp(160): error: identifier "f" is undefined
          f[i].x += dx*fpair;
          ^

../pair_list.cpp(166): error: identifier "f" is undefined
          f[j].x -= dx*fpair;
          ^

compilation aborted for ../pair_list.cpp (code 2)
make[1]: *** [pair_list.o] Error 2
make[1]: Leaving directory `/home/shixx597/codes/lammps-11Aug17/src/Obj_mpi'
make: *** [mpi] Error 2

同事说是openmpi的问题。所以我试着为我安装一个新的 openmpi。但是,我收到以下错误,告诉我 automake 没有像这样安装:

 cd . && /bin/sh /home/shixx597/codes/openmpi-3.0.0/config/missing automake-1.15 --foreign
/home/shixx597/codes/openmpi-3.0.0/config/missing: line 81: automake-1.15: command not found
WARNING: 'automake-1.15' is missing on your system.
         You should only need it if you modified 'Makefile.am' or
         'configure.ac' or m4 files included by 'configure.ac'.
         The 'automake' program is part of the GNU Automake package:
         <http://www.gnu.org/software/automake>
         It also requires GNU Autoconf, GNU m4 and Perl in order to run:
         <http://www.gnu.org/software/autoconf>
         <http://www.gnu.org/software/m4/>
         <http://www.perl.org/>
make: *** [Makefile.in] Error 1

When I tried to install automake-1.15, I get the following error:
CDPATH="${ZSH_VERSION+.}:" && cd . && "/home/shixx597/codes/automake-1.15/t/wrap/aclocal-1.15" 
Can't locate /home/shixx597/codes/automake-1.15/bin/aclocal in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /home/shixx597/codes/automake-1.15/t/wrap/aclocal-1.15 line 29.
make: *** [aclocal.m4] Error 2

我没有任何 sudo 权限可以在这台奇怪的部门机器上做任何事情。

连部门机上lammps的安装都试过了,不知道能不能完成大键合力场模型的运行

其实这个比较有名issue,一共有三种解法

  1. 使用 GCC 而不是 Intel 编译器(可能不可取)。
  2. 在编译时使用 -restrict 标志(我假设在 运行 make 时附加它,比如 make CXX_FLAGS=-restrict
  3. 只需从构建中删除这两个文件。

如果您真的想尝试,您也可以尝试使用 sed 或 awk 从两个有问题的文件中删除 _noalias 关键字:pair_list.hpair_list.cpp,或者只定义_noalias 是一个空关键字,正如 jww 在评论中所建议的那样。