Pro Fortran 6.0/F77 SDK 4.5 for Intel/Linux Technical FAQs
12-Jan-03

Segmentation violation on Linux                                            26-Aug-97
Fx on Linux can't see C Source files                                       27-Aug-97
g77 compiled code runs faster than Absoft's F77                            19-Sep-97
IMSL documentation                                                         22-Sep-97
Supporting -r8 flag in Fortran77                                           24-Sep-97
F90 cannot find functions in modules                                       02-Oct-97
VMS and Unix libraries on Linux                                            21-Mar-00
xfx: can't load library 'libXm.so.2'                                       12-Nov-97
F90 error message problems                                                 26-Feb-00
Using the ABSOFT_RT_FLAGS environment variable                             04-Sep-98
Fortran string lengths                                                     14-Jan-99
setting xfx source paths                                                   27-Jan-99
Linker errors with Linux V6.0                                              11-May-99
Unable to initialize Fx interface, check value of TERM                     12-Jul-99
Problems linking functions compiled with g77                               07-Sep-99
Can I share a COMMON block between two Linux processes?                    04-Nov-99
Linker warnings on Linux                                                   17-Nov-99
Adjustable array is not a dummy argument                                   17-Dec-99
Controlling the FPU in Linux                                               22-Mar-00
BLOCK DATA in a library on Linux                                           22-Mar-00
Static linking on Linux                                                    28-Mar-00
Core dump with HUGE executables                                            08-Jun-00
Linking to g77 and gcc                                                     27-Jun-00
F90 memory is not freed when using deallocate statement                    17-Jul-00
Is there an F90 compiler option for big or little endian?                  22-Sep-00
IMSL linking problem                                                       06-Oct-00

Platform: Intel/Linux

Problem Details:
OS Version: 2.0
Product Version: any
Date: 26-Aug-97

Q. When I declare large arrays (>8 MB of variables), I get a
   segmentation violation from Linux.

A. Use the ulimit command (ulimit is a bash command - the csh equivalent to
  'ulimit -s' is 'limit stack') to raise the stack size limit
   # ulimit -s
   8192
   # ulimit -s 32768
   # ulimit -s
   32768

   The default limit is 8M - it is defined by the following around
   line 293 in sched.h

   #define _STK_LIM        (8*1024*1024)

   the comment above this definition reads

   /*
   * Limit the stack by to some sane default: root can always
   * increase this limit if needed..  8MB seems reasonable.
   */

   The stack size limit can't be raised by "ordinary" users,
   only root. Once raised the limit applies to the current
   process and any children of that process.

index
Platform: Intel/Linux

Problem Details:
OS Version: Linux 1.2 and 2.*
Product Version: any
Date: 27-Aug-97

Q. I am trying to debug a mixed language program on Linux. Even though
   my C files are compiled with -g, Fx can't see them.

A. You need to compile the C files with -gdwarf instead of -g.

index
Platform: Intel/Linux

Problem Details:

OS Version: 1.2.3, 2.0.*
Product Version: 3.4 and 4.4
Date: 19-Sep-97

Q. Why does my double precision Fortran code run 2 to 3 times faster on my
   Pentium/Pentium Pro when compiled with g77 instead of your compiler.

A. The g77 compiler allocates local variables in the data and bss sections,
   both of which are aligned correctly for double precision access. By default,
   Absoft's compiler allocates local variables off the stack, which is not being
   aligned correctly by the startup code. The solution is to specify the -s option
   which forces local variables into the data and bss sections.

index
Platform: All

Problem Details:

OS Version: any
Product Version: any
Date: 22-Sep-97

Q. Where can I find IMSL documentation.

A. The documentation for the IMSL libraries (7 volume set) may be
   purchased separately, or you can find it on line at:

   http://www.vni.com/products/imsl/alphabetized_functions.html

index
Platform: Intel/Linux

Problem Details:

OS Version: Any
Product Version: Fortran77
Date: 24-Sep-97

Q. Does FORTRAN 77 support the -r8 flag?

A. Use the -N113 compiler option.

   The -N2 option forces all intrinsic functions to be performed
   in DOUBLE PRECISION.

index
Platform: Intel/Linux

Problem Details:

OS Version: any
Product Version: any
Date: 02-Oct-97

Q. I have a file which "uses" a precompiled by module containing a
   function used by the main file. When I try to compile the main it
   says there is an unresolved reference.

A. Your module contains executable code. Precompiling it created both
   a module file and an object file. Present the object file to the linker
   and the reference will be resolved. If you're compiling from the
   command line, simply add the object file on the compiler invocation
   line.

index
Platform: Intel/Linux

Problem Details:
OS Version: Linux V6.0
Product Version: Pro Fortran V6.0
Date: 30-Oct-1999

Q. I can't get the VMS (or Unix) libraries to link.

A. The libraries contain three entry points for each function. One
   in all upper case, one in all upper case with a trailing underscore,
   and one in all lower case with a trailing underscore:

   DATE
   DATE_
   date_

   Be sure that your spelling matches one of these.

   The libraries are maintained in /usr/absoft/lib:

   /usr/absoft/lib/libV77.a   VMS compatibility library
   /usr/absoft/lib/libU77.a   Unix compatibility library

   For example:

   test.f:

          character*40 argument
          n = IARGC()
            do i=1,n
              call GETARG(i,argument)
              print *,trim(argument)
           end do
         end

   $ f77 -lU77 test.f

index

Platform: Intel/Linux

Problem Details:

OS Version: any
Product Version: any
Date: 12-Nov-97

Q. When I try to use the xfx debugger I get an error message:

   xfx: can't load library 'libXm.so.2'

A. xfx uses the Motif shared libraries which are not usually
   included with Linux, but can be added to it. If you do not
   have the Motif libraries installed, you can use a version of
   xfx that was linked against static Motif libraries. This
   version is:

   /usr/bin/Xll/xfx.static

index
Platform: Intel/Linux

Problem Details:

OS Version: any
Product Version: ProFortran 5.0
Date: 26-Feb-98

Q. When I try to compile a program with the Fortran 90
   compiler I get the following error message:

   cft90 INTERNAL: Cannot retrieve message 3 from the message system.

   What does this message mean?

A. The error message file is:

   /usr/absoft/lib/nls/cf90

   This path is hard-wired into the compiler. However, if an
   environment variabled named NLSPATH is defined, the compiler
   will use it to attempt to locate the message file. Either
   unset this variable when you are using the Fortran 90 compiler,
   or add the path specified above to the variable:

   NLSPATH=/usr/absoft/lib/nls/%N
   export NLSPATH

index
Platform: All

Problem Details:
OS Version: Any
Product Version: Pro Fortran 6.0 and later
Date: 04-Sep-98

Q. How can I modify the default behavior of the Absoft runtime library?

A. Starting with Absoft Pro Fortran 6.0 and Absoft Fortran SDK 4.5, the
   runtime library checks for an environment variable named ABSOFT_RT_FLAGS
   on entry to the first I/O statement in a program.

   The following switches can be specified using this variable:

   -defaultcarriage:

   Causes the units preconnected to standard output to interperet
   carriage control characters as if they had been connected with
   ACTION='PRINT'.

   -fileprompt:

   Causes the library to prompt the user for a filename when it
   implicitly opens a file as the result of I/O to an unconnected
   unit number. By default, the library creates a filename based on
   the unit number.

   -vaxnames:

   Causes the library to use 'vax style' names (FORnnn.DAT) when
   creating a filename as the result of I/O to an unconnected
   unit number.

   -unixnames:

   Causes the library to use 'unix style' names (fort.nnn) when
   creating a filename as the result of I/O to an unconnected
   unit number.

   -bigendian:

   Causes the library to interpret all unformatted files using
   big endian byte ordering.

   -littleendian:

   Causes the library to interpret all unformatted files using
   little endian byte ordering.

   -noleadzero:

   Causes the library to surpress the printing of leading zeroes
   when processing an Fw.d edit descriptor. This only affects the
   limited number of cases where the ANSI standard makes printing
   of a leading zero implementation defined.

   -reclen32:

   Causes the library to interpret the value specified for RECL=
   in an OPEN statement as 32-bit words instead of bytes.

   Note: the leading minus sign is required for each switch and multiple
   switches must be separated by one or more spaces.

index

Platform: Intel/Linux

Problem Details:

OS Version: any Linux
Product Version: Pro Fortran 5.0
Date: 20-May-98

Q. I can't get the Unix compatibility library 'signal' function to
work.

A. You'll need to make a small modification to the file "signal.inc".
The file was installed in the directory: /usr/src/absoft/libU77.
Remove the VAL() function reference for the "proc" argument so
that it reads:

result = signal(VAL(signum), proc)

Save your changes and type "make" at the Linux prompt. The library
will be rebuilt and copied to /usr/lib

index
Platform: All

Problem Details:
OS Version: any
Product Version: any
Date: 14-Jan-1999

Q. Does Absoft Fortran pass the lengths of strings like most Unix
   Fortran compilers I've used?

A. Yes, string lengths are passed as extra arguments (by value) at
   the end of the formal argument list:

   C:\Absoft60>type main.c
   #include <string.h>

   void Fcode(char *, int, double *, int);

   int main()
   {
   char string[13] = {"hello, world"};
   int i = 1;
   double d = 2.0;

   Fcode(string, i, &d, strlen(string));

   return 0;
   }

   C:\Absoft60>acc -c -A main.c
   Absoft C/C++ Compiler 1.3, Copyright (c) 1994-1997, Absoft Corp.

   C:\Absoft60>type fcode.f
   subroutine Fcode(string, i, d)

   character*(*) string
   integer i
   value i
   double precision d

   print *, string, i, d, len(string)

   end

   C:\Absoft60>f77 -o main.exe main.obj fcode.f
   FORTRAN 77 Compiler 4.5, Copyright (c) 1987 - 1998, Absoft Corp.

   C:\Absoft60>main
   hello, world 1 2.00000000000000 12

   C:\Absoft60>

index

Platform: Intel/Linux

Problem Details:

OS Version: Linux
Product Version: any
Date: 27-Jan-1999

Q. Is there an execution argument for "xfx" that sets the path
   in which it should search for sources?

A. You can use an environment variable or a command line
   argument:

   export FXSRCPATHS={colon separated list of directories}

   or:

   xfx -p {colon separated list of directories}

index
Platform: Intel/Linux

Problem Details:
OS Version: Linux 6.0
Product Version: All
Date: 11-May-1999

Q. I have (or recently upgraded) to Linux V6.0. When I compile,
   I get unresolved references to "_fxstat" and "_xstat". Am I
   missing a library?

A. The C library was also updated with Linux V6.0 from libc5 to
   glibc. You will need a new Absoft runtime library that references
   the updated C library:

   http://www.absoft.com/download/linux6.0downloads.html

index

Platform: Intel/Linux

Problem Details:
OS Version: RedHat 6.0 (Maybe others)
Product Version: All
Date: 12-Jul-1999

Q. Everytime I launch the curses version of Fx, I get the following error:

   Unable to uinitialize Fx interface, check value of TERM.

   I check the value of TERM and it seems ok.

A. The location of the terminfo database moved in RedHat 6.0. Fx is looking
   for /usr/lib/terminfo, but the database is now located in
   /usr/share/terminfo.
   You can fix this problem by setting the value of an enviornment variable
   named TERMINFO to the correct location.

   set TERMINFO=/usr/share/terminfo
   export TERMINFO

   or

   setenv TERMINFO /usr/share/terminfo

index

Platform: Intel/Linux

Problem Details:

OS Version: Linux
Product Version: Any
Date: 07-Sep-1999

Q. I am trying to link to some functions compiled with g77. When I compile my
   program I get linker errors and undefined reference to any of the necessary
   functions.

A. Include the g77 runtime library libf2c.a in your compile line to make it an
   argument to the linker.

index

Platform: Intel/Linux

Problem Details:

OS Version: Linux
Product Version: 6.0
Date: 04-Nov-1999

Q. Is it possible to use the Linux shared memory API to share a FORTRAN
   COMMON block between two FORTRAN programs?

A. Yes. By using a combination of Absoft extensions this can be done.
   See ftp://ftp.absoft.com/pub/linux/profortran6.0/sharedmem.tar.gz
   for an example. Note that this code is not portable to other FORTRAN
   compilers.

index

Platform: Intel/Linux

Problem Details:
OS Version: Any
Product Version: Any
Date: 17-Nov-1999

Q. Every time I compile a program I get a warning message like:

         "warning: multiple common of `_io_comm'"
         "warning: previous common is here"

A. You are probably using a SuSE implementation of Linux.   For
   unknown reasons, they configure the C compiler to use the
   default option: "-warn-common". This causes the warnings you
   are seeing.

   You can eliminate these warnings by reconfiguring your default
   options maintained in the "specs" file for gcc.

   On SuSE 6.0, edit the file:

   /usr/lib/gcc-lib/i486-linux/egcs-2.91.60/specs

   and remove ONLY -warn-common from the *.lib section

   On SuSE 6.1 and SuSE 6.2, edit the file

   /usr/lib/gcc-lib/i486-linux/egcs-2.91.66/specs

   and remove ONLY -warn-common from the *.lib section

index

Platform: All

Problem Details:
OS Version: Any
Product Version: Any
Date: 17-Dec-1999

Q. I get the error message:
	"adjustable array is not a dummy argument"

A. The most common cause of this is:

   subroutine some_name(a,b,n)
   real A(N), B(N)

   The FORTRAN 77 compiler is case sensitive by default.
   The easiest way to solve this type of problem is use a
   case folding option: -f or -N109.

index

Platform: Intel/Linux

Problem Details:

OS Version: any
Product Version: 5.0
Date: 09-Nov-98

Q. I can't get the VMS (or Unix) libraries to link.

A. The libraries were built with the fold to upper case compiler option
   (-N109) to simplify using them with the Fortran 90 compiler as well as
   the FORTRAN 77 compiler. You will need to use the same option or else
   specify subroutine/function names in upper case.

   The libraries are maintained in /usr/absoft/lib:

   /usr/absoft/lib/libV77.a VMS compatibility library
   /usr/absoft/lib/libU77.a Unix compatibility library

   For example:

   test.f:

         character*40 argument
         n = IARGC()
           do i=1,n
            call GETARG(i,argument)
            print *,trim(argument)
          end do
        end

   $ f77 -lU77 test.f

index
Platform: Intel/Linux

Problem Details:

OS Version: Linux
Product Version: any
Date: 03-Mar-98

Q. How can I control the processor FPU?

A. You can use arm387 to control the FPU. This is an
   integer function built into the runtime library. Here
   are the definitions of the control arguments:

fenv.inc:

! Intel specific FPU control constants for use with fpcontrol

        integer*4 FE_TONEAREST
        parameter ( FE_TONEAREST  = (z'00000000'))

        integer*4 FE_TOWARDZERO
        parameter ( FE_TOWARDZERO = (z'00000C00'))

        integer*4 FE_UPWARD
        parameter ( FE_UPWARD     = (z'00000800'))

        integer*4 FE_DOWNWARD
        parameter ( FE_DOWNWARD   = (z'00000400'))

        integer*4 FE_INEXACT
        parameter ( FE_INEXACT    = (z'00000020'))

        integer*4 FE_DIVBYZERO
        parameter ( FE_DIVBYZERO  = (z'00000004'))

        integer*4 FE_UNDERFLOW
        parameter ( FE_UNDERFLOW  = (z'00000010'))

        integer*4 FE_OVERFLOW
        parameter ( FE_OVERFLOW   = (z'00000008'))

        integer*4 FE_INVALID
        parameter ( FE_INVALID    = (z'00000001'))


Then use arm387 as follows:

test.f:

        implicit none
        include "fenv.inc"
        integer arm387
        integer state

* first retrieve the current state of the FPU

        state = arm387(0)

* enable divide-by-zero exceptions (for example)

        state = arm387(state .and. .not. FE_DIVBYZERO)


        end

index

Platform: Intel/Linux

Problem Details:

OS Version: Linux
Product Version: 6.0
Date: 22-Mar-00

Q. How do I get Pro Fortran to recognize a BLOCK DATA subprogram
   in a library?

A. A BLOCK DATA subprogram generates static initialization of a
   COMMON block into the data section. Since there are no unresolved
   text references, the linker does not need the module and ignores
   it. To force the linker to include a BLOCK DATA subprogram from a
   library, first compile it with the -N116 option. This generates
   a subroutine stub with the same name as the BLOCK DATA subprogram.
   Next, specify the linker option to undefine the subroutine name
   which will force the linker to include the module. If the BLOCK
   DATA subroutine name is 'MyData', the f77 option(s) would be:

   -X -u -X MyData

   Note: If the BLOCK DATA subprogram is unnamed, the name of the
   subroutine stub will be 'BLANK'.

index

Platform: Intel/Linux

Problem Details:

OS Version: Linux
Product Version: any
Date: 28-Mar-00

Q. If I want executable files to run on other linux systems
   which do not have the Absoft compiler installed, do I need
   to link the libraries statically or does that happen automatically?

A. In order to statically link the libraries you must pass
   an argument to the linker on the command line like this:

   -X -static

index

Platform: Intel/Linux

Problem Details:

OS Version: Linux
Product Version: any
Date: 08-Jun-00

Q. I have a program with some very large arrays; 500 MB
   and more. I have plenty of memory in my computer, but
   the program still core dumps immediately.

A. First, be certain that you are using the '-s' (static
   storage) compiler option (f77 or f90). The default Linux
   stack size of 8 MB will not be sufficient.

   This is a problem with the Linux dynamic loader. You should
   be able to solve the problem by linking against static
   versions of the system libraries to avoid dynamic linking.
   Add this option to your compiler command line:

   -X -static

index

Platform: Intel/Linux

Problem Details:

OS Version: Linux
Product Version: 6.0
Date: 27-Jun-00

Q. I am trying to use a compiled g77 object with Absoft
   f77 or f90 and I receive these errors:

    test.o(.text+0x9): undefined reference to `s_wsle'
    test.o(.text+0x22): undefined reference to `do_lio'
    test.o(.text+0x2a): undefined reference to `e_wsle'

A. You must link against the g77 runtime library f2c or g2c
   depending on your Linux distribution.

Q. Ok, I added -lg2c and I still get an unresolved reference
   to the g77 subroutine that I am trying to call in F77?

A. G77 folds all external names to lower case and appends
   a trailing underscore. You must add the -B108 and -f compiler
   options. Your compile line should look like this:

   f77 t.f test.o -lg2c -B108 -f

   For F90 you must also add -YEXT_NAMES="LCS"
   which folds all external symbolic names to lower case
   and -B108 that appends a trailing underscore.
   Your compile line should look like this:

   f90 t.f test.o -lg2c -B108 -YEXT_NAMES="LCS"

Q. I am trying to use F77 with gcc.  My C code compiles fine.  When
   I try to use the compiled gcc object code with F77, I receive unresolved
   references for every call to the C math library that is in my C code?

A. Add libm.a to your compile line like this:

       f77 t.f test.o -lm

Q. Is there an equivalent of -fno-second-underscore in your compiler?
   I need to be able to link g77/gcc produced code that is compiled with this option.

A. Do not use the -B108 f77/f90 compiler option. This is a back-end (code generator)
   option and has specific knowledge of the Linux environment; hence the double underscores.
   Instead, use a front-end option which is machine independent:

   f77: -N15
   f90: -YEXT_SFX='_'
     

index

Platform: Intel/Linux

Problem Details:

OS Version: Linux
Product Version: 6.0
Date: 17-Jul-00

Q. I am trying to use the deallocate function in your
   f90 compiler and allocated memory is not freed when
   using a deallocate statement.

A. You're not seeing the memory released because the f90
   runtime manager is caching it. It caches all deallocated
   blocks so that subsequent reallocations of the same size
   block will occur faster.

   If your application requires that this be defeated, here's
   how:

   If you want to have memory returned to the system immediately
   you can call into the runtime library after the DEALLOCATE
   statement. The sample program below demonstrates the call.
   Please note that if any memory request is refused or fails at
   the system level, all cached memory is returned and the system
   call is repeated.

      program sample
      !DIR$ NAME (release_cache="_f90a_free_all")
      call release_cache()
      END

   There is a patch avaible for Intel Linux users at the Absoft FTP
   site that accomplishes this:

   http://www.absoft.com/download/linux6.0downloads.html

index

Platform: All

Problem Details:

OS Version: All
Product Version: All
Date: 22-Sep-00

Q. Is there an F90 compiler option that will force the compiler to
   consider the byte ordering of all unformatted files to either big
   or little endian?

A. Use the F90 open statement specifier:
   convert ={"big_endian"|"little_endian"}

   For example:

   Open(10,file="filename",form="unformatted",convert="big_endian")

   Or, use the ABSOFT_RT_FLAGS as described in the technical FAQ on
   using the ABSOFT_RT_FLAGS environment variable which can
   be found here:

   linux60tfaq.html#anchor0058

index

Platform: All

Problem Details:
OS Version: any
Product Version: any
Date: 06-Oct-00

Q. I'm having problems using the IMSL functions. The linker reports
   unresolved references for any function I try to use.

A. You must include the IMSL library:

   Windows:   imsl.lib
   Macintosh: "{AbsoftLibraries}"imsl.lib
   Linux:     libimsl.a

   as an argument to the linker.

   On Windows and Macintosh, the libraries have been compiled with the
   fold to lower case option (-f) enabled. On Linux, they have been compiled
   with the fold to upper case option (-N109) enabled. It will be necessary
   either to:

   a) use a compiler case folding option
   b) spell the library names in the correct case
   c) use a linker alias file (not available on Linux)

index