System call under Linux, gfortran v4.4.5

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 Hi All,

I am building a model which should be portable to any possible platform.
Unfortunately, the support for gfortran users is limited, so that is why I try to ask my question here.

There is a script that used the system() command.
Now, as a (g)fortran newbie, I am not exactly sure what it does, and definitely not how to define it for my linux environment.

In my example:

public :: shr_sys_system  ! make a system call
public :: shr_sys_chdir   ! change current working dir
public :: shr_sys_getenv  ! get an environment variable
public :: shr_sys_abort   ! abort a program
public :: shr_sys_irtc    ! returns real-time clock tick
public :: shr_sys_sleep   ! have program sleep for a while
public :: shr_sys_flush   ! flush an i/o buffer

in which a subroutine is configured as follows (e.g. for shr_sys_system):
SUBROUTINE shr_sys_system(str,rcode)

   IMPLICIT none

   !----- arguments ---
   character(*)        ,intent(in)  :: str    ! system/shell command string
   integer(SHR_KIND_IN),intent(out) :: rcode  ! function return error code

   !----- functions -----
#if (defined CRAY) || (defined UNICOSMP)
integer(SHR_KIND_IN),external :: ishell ! function to envoke shell command
#endif
#if (defined OSF1 || defined SUNOS || (defined LINUX && !defined __G95__) || (defined LINUX && !defined CATAMOUNT)) integer(SHR_KIND_IN),external :: system ! function to envoke shell command
#endif

   !----- local -----
#if (defined CATAMOUNT)
   character(2*SHR_KIND_CL) :: file1            ! one or two filenames
   character(  SHR_KIND_CL) :: file2            ! 2nd file name
integer(SHR_KIND_IN) :: iloc ! index/location within a string
#endif

   !----- formats -----
   character(*),parameter :: subName =   '(shr_sys_system) '
   character(*),parameter :: F00     = "('(shr_sys_system) ',4a)"

!-------------------------------------------------------------------------------
! PURPOSE: an architecture independant system call
! NOTE:
! - for Catamount (Cray, pheonix at ORNL) there is no system call -- workarounds
!   exist only for simple "rm" and "cp" commands
!-------------------------------------------------------------------------------


In the last part, there are some calls dependent on my system (my case = Linux):
#if (defined CRAY) || (defined UNICOSMP)
   rcode=ishell(str)
#endif

#if (defined IRIX64 || defined NEC_SX)
   rcode = 0
   call system(str)
#endif

#if (defined AIX)
   call system(str,rcode)
#endif

#if (defined OSF1 || defined SUNOS || defined LINUX && !defined CATAMOUNT || defined __G95__)
   rcode = SYSTEM(str)
#endif

#if (!defined CRAY && !defined IRIX64 && !defined AIX && !defined OSF1 && !defined SUNOS && !defined LINUX && !defined NEC_SX && !defined UNICOSMP && !defined __G95__)
   write(s_logunit,F00) 'ERROR: no implementation for this architecture'
   call shr_sys_abort(subName//'no implementation for this architecture')
#endif

END SUBROUTINE shr_sys_system

So my question here is how to define the system call exactly for Linux. Because as it is now, I get the following error: /usr/workdir/cesm1_0_2/scripts/test2/lib/libcsm_share.a(shr_sys_mod.o): In function `shr_sys_system': /usr/workdir/cesm1_0_2/models/csm_share/shr/shr_sys_mod.F90:83: undefined reference to `system_'

and I can't seem to find a lot of information on this on the web!
Therefore, any help is welcome!

Cheers,
Matthias


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux