gfortran 包含即使使用 -I 选项也会被忽略的文件

gfortran include files ignored even with -I options

我正在尝试使用 gfortran 进行编译,方法如下:

$ gfortran -I/usr/local/include -O3 -Wall -Wno-uninitialized -fbounds-check -g alignparts_lmbfgs.f90 /home/vincent/test/lmbfgs/Lbfgsb.3.0/lbfgsb.f /home/vincent/test/lmbfgs/Lbfgsb.3.0/linpack.f /home/vincent/test/lmbfgs/Lbfgsb.3.0/blas.f /home/vincent/test/lmbfgs/Lbfgsb.3.0/timer.f /home/vincent/test/lmbfgs/minimal_libraries/imlib2010.a /home/vincent/test/lmbfgs/minimal_libraries/genlib.a -o alignparts_lmbfgs.exe -lfftw3 -lm

但它给了我错误

alignparts_lmbfgs.f90:105: Error: Can't open included file '/usr/include/fftw3.f'

即使我指定了 fftw3.f 所在的 -I 选项。

我做错了什么?我没有 root 权限,所以我不能将文件从 /usr/local/include 移动到 /usr/inlcude

我是个编译小白。我只是在编译,因为这是我获得可执行文件的唯一方式。解释时请尽可能避免菜鸟。非常感谢!

编译器报告:

alignparts_lmbfgs.f90:105: Error: Can't open included file '/usr/include/fftw3.f'

这意味着您的源文件 alignparts_lmbfgs.f90 包含 第 105 行如:

INCLUDE '/usr/include/fftw3.f'

告诉编译器将文件 /usr/include/fftw3.f 复制到位 那行#105。但是没有这个文件。

您已经传递了编译器选项 -I/usr/local/include 告诉编译器在 /usr/local/include 中搜索包含的文件, 你说:

I specified the -I options where the fftw3.f resides.

所以可能这样的文件/usr/local/include/fftw3.f?

那样的话,可以改成:

INCLUDE '/usr/include/fftw3.f'

至:

INCLUDE '/usr/local/include/fftw3.f'

但是,如果您这样做,则编译器选项:

-I/usr/local/include

没有意义,因为 /usr/local/include/fftw3.f 是一个绝对文件名: 它要么存在,要么不存在。

如果您希望程序独立于绝对位置进行编译 fftw3.f - 这显然是最佳实践 - 然后将第 105 行替换为:

INCLUDE 'fftw3.f'

然后,如果fftw3.f实际上位于/usr/local/include,你可以编译 带有选项 -I/usr/local/include 的程序,通常如果文件 位于目录/look/here/for/headers,可以编译程序 使用选项 -I/look/here/for/headers.