如何避免与OpenMPI名称冲突?

时间:2013-03-08 10:33:59

标签: c++ c 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++

2 个答案:

答案 0 :(得分:1)

LB是官方MPI C ++绑定的一部分。如果不关闭整套C ++绑定,就无法将其关闭。

但请注意,MPI“LB”位于MPI ::名称空间中。所以你也可以让你的LB成为一个实际常数(相对于#define) - 在你的头文件中可能是这样的:

extern const int LB;

(然后你必须在某处实际实例化const int LB)

这会使LB常量超出MPI名称空间,因此不会发生冲突。

答案 1 :(得分:0)

可以使用宏

禁用OpenMPI C ++绑定
#define OMPI_SKIP_MPICXX