Search code examples
linuxfortrangfortrannag-fortran

Link to NAG library with -lnag


I'm trying to compile my first program which uses the NAG library, the following:

program naginfo

    use nag_f77_a_chapter
    implicit none

    write(*,*) 'Calling NAG identification routine'
    write(*,*)
    call a00aaf

end program naginfo

This is copied from the tutorial and they suggest to compile it with the following statement:

f95 -o naginfo naginfo.f90 -lnag

and they suppose that this -lnag drives the linker to NAG library, but then I find this error:

Fatal Error: Can't open module file ‘nag_f77_a_chapter.mod’ for reading at (1): The directory does not exist

I've tried changing the directory of the NAG files to help the linker find it.

How do I get this to compile and link?


Solution

  • This is just a long explanation of francescalus's comment.

    The flag -lnag only adds the library code to the already compiled program when linking all compiled pieces together. It has no effect during compilation and hence no effect on the error message you see.

    The compiler must see the information about the NAG library modules. That is usually stored in module files with the .mod extension. Compilers normally only search for these in the current directory or in the system's include directories.

    You can instruct the compiler to search in a different directory by using a special compiler flag. It may differ between different compilers, but is typically -I followed by the directory where the library stores its .mod files.

    Be advised that the .mod files in the library are only compatible with the same compiler that was used to create them by the library vendor.