C ++ / LapackE代码在Windows上编译好,但是相同的代码在Linux上编译失败

使用LapackE和MPI库编写的C ++代码可以在使用GNU C ++ 4.9.2的Windows上编译和运行。

将该代码迁移到Linux(CentOS)服务器无法编译 ! Linux机器上的GNU C ++是4.4.7。 在这两种情况下,我使用了相同的LapackE头文件。 MPI在Linux机器上运行良好。

在检查两台机器上的预处理器输出文件后,我可以将错误消息与以下情况联系起来:在_Complex中replace原始代码中的复杂声明。 下面是一个复杂的dynamic数组HAMILTONIAN在Linux上编译时遇到问题的声明示例:

在正宗的源头上: lapack_complex_double * HAMILTONIAN;

在WINDOWS预览。 文件(效果很好): _lapack_complex_double * HAMILTONIAN;

在LINUX预览版中。 FILE(无法编译): double _Complex * HAMILTONIAN;

这可能是与GCC的不同版本有关的问题吗?

我已经尝试了#define _Complex复杂的,但最终没有帮助。

一些报告C99 _Complex和C ++复杂的互操作性的问题 : 可能类似的问题 。

请帮忙。 谢谢!

Solutions Collecting From Web of "C ++ / LapackE代码在Windows上编译好,但是相同的代码在Linux上编译失败"

它编译好,即使我删除"extern "C" ,只是保持代码块#1 #include”Headers_LAPACKE / …“。

做这个。 LAPACK头文件中包含#if __cplusplus检查,它们的设计使得用户代码不需要,也不应该有围绕它们的extern "C"

首先,将GCC编译器设置为4.8或更高:在我的情况下,我们必须保留旧的GCC 4.4.7并且同时安装GCC 4.9.2。 为了能够在MPI编译中使用更新的版本,必须将其添加到PATH的前面。 为此,请参阅如何更改在Linux CentOS上与MPI一起使用的默认GCC编译器的答案

其次,在使用LapackE(Lapack的C包装器)进行编译时,必须使用以下预处理器选项(-D):

-D LAPACK_COMPLEX_STRUCTURE -D HAVE_LAPACK_CONFIG_H -D ADD_

例:

bash-4.1 $ mpiCC main.cpp -L / home / USER1 / lapack-3.6.1 -llapacke -llapack -lblas -lm -Wall -D LAPACK_COMPLEX_STRUCTURE -D HAVE_LAPACK_CONFIG_H -D ADD_

确保:

bash-4.1 $ gcc –version

4.8或更高。 就我而言,它是:gcc(GCC)4.9.3