有谁知道是否可以使用gcc
编译MPI?我需要使用gcc
,没有mpicc
。
最佳答案
mpicc
只是某些编译器的包装。大多数实现都有其mpicc
包装器理解特殊的选项,例如-showme
(Open MPI)或-show
(Open MPI,MPICH和派生类),这些选项提供了包装器传递给后端编译器的完整选项列表。
例如,在Open MPI中,包装程序是C++程序,它们读取纯文本配置文件并构建命令行选项,这些选项进一步传递给编译器。 mpicc -showme
显示这些选项的完整列表:
$ mpicc -showme
icc
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
(实际上,我在这里单行以提高可读性)
特殊情况下,英特尔C编译器
icc
被用作后端编译器,但我们也有使用GCC的变体。您还可以使用CFLAGS
获得完成阶段所需的选项列表(通常称为mpicc -showme:compile
):$ mpicc -showme:compile
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
以及需要使用
LDFLAGS
传递给链接器的选项列表(称为mpicc -showme:link
):$ mpicc -showme:link
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
这些可以被使用,例如在
Makefile
中,如下所示:...
CFLAGS += $(shell mpicc -showme:compile)
LDFLAGS += $(shell mpicc -showme:link)
...
据我所知
-showme:compile
和-showme:link
是Open MPI特有的,其他实现仅在使用-show
调用时给出完整的选项列表。我仍然认为直接使用
mpicc
更好,因为如果MPI设置中的某些内容发生更改,它会立即反射(reflect)在包装中,而您必须手动更改构建脚本/ Makefile
(除非您使用-showme:compile
和-showme:link
来自动获取选项)。关于gcc - 如何用gcc编译MPI?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11312719/