Vince_Stack
Vince_Stack

Reputation: 3

gfortran include files ignored even with -I options

I am trying to compile using gfortran using the following:

$ 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

but it gave me the error

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

even though I specified the -I opitions where the fftw3.f resides.

What am I doing wrong? I don't have root privileges so I can't just move the files from /usr/local/include to /usr/inlcude

I am a noob in compiling. I am only compiling because this is the only way I am getting the executable. Please be as noob-proof as possible when explaining. Thank you so much!

Upvotes: 0

Views: 1805

Answers (1)

Mike Kinghan
Mike Kinghan

Reputation: 61397

The compiler reports:

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

This means that your source file alignparts_lmbfgs.f90 contains a line #105 like:

INCLUDE '/usr/include/fftw3.f'

which tells the compiler to copy the file /usr/include/fftw3.f in place of that line #105. But there is no such file.

You have passed the compiler option -I/usr/local/include which tells the compiler to search for included files in /usr/local/include, and you say:

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

So probably there is such a file as /usr/local/include/fftw3.f?

In that case, can change:

INCLUDE '/usr/include/fftw3.f'

to:

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

However, if you do that, then the compiler option:

-I/usr/local/include

is pointless, because /usr/local/include/fftw3.f is an absolute filename: it either exists or it doesn't.

If you want the program to be compilable independently of the absolute location of fftw3.f - which is emphatically the best practice - then replace line #105 with:

INCLUDE 'fftw3.f'

Then, if fftw3.f is in fact located in /usr/local/include, you can compile the program with the option -I/usr/local/include, and in general if the file is located in directory /look/here/for/headers, you can compile the program with the option -I/look/here/for/headers.

Upvotes: 1

Related Questions