Как избежать конфликтов имен с OpenMPI?

Чтобы установить так называемые функциональные флаги в нашем коде, мы используем внешний файл. Там мы определяем макрос

#define LB

Мы просто портировали наше программное обеспечение на C ++, а затем появились ошибки, в частности, это

/usr/local/openmpi-1.6.4/include/openmpi/ompi/mpi/cxx/constants.h:174:28: error: declaration does not declare anything [-fpermissive]

Поиск в соответствующем файле показывает, что OpenMPI использует внутренний тип данных, называемый LB,

OMPI_DECLSPEC extern const Datatype LB;

Как я могу избежать конфликта имен? Переименование макроса #define LB не вариант, так как это разрушает обратную совместимость. Можно ли использовать CИнтерфейс OpenMPI с C++?

-1

Решение

LB является частью официальных привязок MPI C ++. Вы не можете отключить его, не отключив весь набор привязок C ++.

Но обратите внимание, что MPI «LB» находится в пространстве имен MPI ::. Таким образом, вы также можете сделать свой LB реальной константой (вместо #define) — возможно, что-то вроде этого в вашем заголовочном файле:

extern const int LB;

(и тогда вам, конечно, нужно создать экземпляр этого const int LB)

Это сделает константу LB вне пространства имен MPI и, следовательно, не будет конфликтовать.

1

Другие решения

Можно отключить привязки OpenMPI C ++ с помощью макроса

#define OMPI_SKIP_MPICXX
0

По вопросам рекламы [email protected]