linux - P3DFFT 编译 - ifort 编译器错误 - "multiple definiton of ' main' "

标签 linux compilation compiler-errors fft fftw

我需要在多台计算机上编译 P3DFFT。问题是,当它在我的个人 PC 上编译时,我无法在使用不同编译器的其他 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__'

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


编辑:

我已经阅读了这些问题,但似乎没有一个描述的是与我遇到的问题相同的问题:

最佳答案

根据 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.

因此,按照说明,要链接包含 main 定义的 driver_rand.c 文件,您应该添加 -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

关于linux - P3DFFT 编译 - ifort 编译器错误 - "multiple definiton of ' main' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36221612/

相关文章:

不同文件中的Java类编译

Linux 下 C++ 编译错误

linux - 使用选项卡式输出在 Linux 上显示用户

node.js - 无法从 npm 安装最新的软件包版本

linux - 在 Linux 中使用 ssh 在本地服务器上执行远程脚本

compiler-errors - 关于编译器-l选项(arm-linux-androideabi-gcc)

haskell - 哪个 Haskell 编译器具有信息丰富的(初学者友好的)错误消息?

python - open() 的 I/O 错误

xcode - iOS : Absolute project path with xcodebuild

c++ - 如何修复1个 Unresolved external 问题,为什么会首先出现