Чтобы установить так называемые функциональные флаги в нашем коде, мы используем внешний файл. Там мы определяем макрос
#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++
?
LB является частью официальных привязок MPI C ++. Вы не можете отключить его, не отключив весь набор привязок C ++.
Но обратите внимание, что MPI «LB» находится в пространстве имен MPI ::. Таким образом, вы также можете сделать свой LB реальной константой (вместо #define) — возможно, что-то вроде этого в вашем заголовочном файле:
extern const int LB;
(и тогда вам, конечно, нужно создать экземпляр этого const int LB)
Это сделает константу LB вне пространства имен MPI и, следовательно, не будет конфликтовать.
Можно отключить привязки OpenMPI C ++ с помощью макроса
#define OMPI_SKIP_MPICXX