Пакет, который я создаю (SPRNG, ссылка здесь , но не нужен для этого вопроса), использует синтаксис вызова в некоторых местах, с которыми я не знаком. Для моего предыдущего стека зависимостей (Intel 16.0 с OpenMPI 1.10.1) это работало. К сожалению, мой текущий стек (Intel 19 с OpenMPI 3.1.3) не нравится. Я не c++
человек, и при этом я не хочу существенно изменять пакет, если я не должен.
Пример кода:
#include <mpi.h>
int main(int argc, char *argv[]) {
int myid;
MPI::Init(argc, argv);
myid = MPI::COMM_WORLD.Get_rank();
}
На предыдущем стеке все было хорошо:
$ mpic++ --version
icpc (ICC) 16.0.0 20150815
Copyright (C) 1985-2015 Intel Corporation. All rights reserved.
$ mpirun --version
mpirun (Open MPI) 1.10.1
Report bugs to http://www.open-mpi.org/community/help/
$ mpic++ sprng_issue.cpp
<no errors>
Но с новым стеком:
$ mpic++ --version
icpc (ICC) 19.0.1.144 20181018
Copyright (C) 1985-2018 Intel Corporation. All rights reserved.
$ mpirun --version
mpirun (Open MPI) 3.1.3
Report bugs to http://www.open-mpi.org/community/help/
$ mpic++ sprng_issue.cpp
sprng_issue.cpp(6): error: name followed by "::" must be a class or namespace name
MPI::Init(argc, argv);
^
sprng_issue.cpp(7): error: name followed by "::" must be a class or namespace name
myid = MPI::COMM_WORLD.Get_rank();
^
compilation aborted for sprng_issue.cpp (code 2)
Мои вопросы:
Есть ли имя для этого вызывающего метода? У меня были проблемы с поиском, потому что это просто. Насколько это странно / старо / нестандартно?
Существует ли флаг компилятора (Intel или другие) для включения устаревшего поведения?
Любые другие рекомендации для простого способа пройти без существенного изменения кода пакета?