P3DFFT编译 - ifort编译器错误 - “主要'的多个定义”

时间:2016-03-25 14:14:10

标签: linux compilation compiler-errors fft fftw

我需要在多台计算机上编译P3DFFT。问题是,虽然它在我的个人电脑上编译,但我无法在使用不同编译器的其他PC上编译它。

我的电脑:

mpif90 -g -O2 -I../../include driver_rand.c /home/martin/p3dfft/build/libp3dfft.a -L/home/martin/fftw3/libs -lfftw3 -o driver_rand

我的mpif90版本:

GNU Fortran (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010

另一台计算机上的命令:

mpif90 -g -O2 -I../../include driver_rand.c ../../build/libp3dfft.a -L../../../fftw-3.3.4/.libs -lfftw3 -o driver_rand

错误:

driver_rand.c: file not recognized: File format not recognized

这显然是由编译器的不同行为引起的,它无法编译.c个文件:

ifort (IFORT) 16.0.1 20151021

但是当我尝试使用mpicc进行编译并仅使用mpif90进行链接时,我收到了另一个错误:

mpicc -c -g -O2 -I../../include driver_rand.c ../../build/libp3dfft.a -L../../../fftw-3.3.4/.libs -lfftw3 -o driver_rand.o

mpif90 -g -O2 -I../../include driver_rand.o ../../build/libp3dfft.a -L../../../fftw-3.3.4/.libs -lfftw3 -o driver_rand

/home/bes0030/p3dfft/sample/C/driver_rand.c:67: multiple definition of `main'
/apps/all/ifort/2016.1.150-GCC-4.9.3-2.25/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64_lin/for_main.o:for_main.c:(.text+0x0): first defined here
/apps/all/ifort/2016.1.150-GCC-4.9.3-2.25/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64_lin/for_main.o: In function `main':
for_main.c:(.text+0x2a): undefined reference to `MAIN__'

现在我完全迷失了 - 这次我做错了什么?我以前从未见过“主要的多重定义”错误。

编辑:

我已经阅读过这些问题,但似乎没有一个问题像我一样描述同样的问题:

1 个答案:

答案 0 :(得分:0)

根据the ifort man page,ifort编译器有一个nofor_main命令行开关:

-nofor_main
         Specifies the main program is not written in Fortran, and  pre-
         vents  the  compiler from linking for_main.o into applications.
         The default is -for_main.

因此,根据指示,要与包含driver_rand.c定义的main文件相关联,您应该添加-nofor_main选项:

mpif90 -nofor_main -g -O2 -I../../include driver_rand.o ../../build/libp3dfft.a -L../../../fftw-3.3.4/.libs -lfftw3 -o driver_rand