#!/bin/sh -x cat >cb_main.f <<\EOF program cb_main !GCC$ ATTRIBUTES DLLEXPORT :: /cb1/ integer cvar common /cb1/ cvar cvar = 0 call cb_func() if(cvar.eq.2) then write(*,*)'GOOD COMMON BLOCK' else write(*,*)'BAD COMMON BLOCK' endif end EOF cat >cb_func.f <<\EOF subroutine cb_func() !GCC$ ATTRIBUTES DLLIMPORT :: /cb1/ integer cvar common /cb1/ cvar cvar = 2 cvar2 = 2 end EOF ################################################################################ rm -f *.o *.dll *.a *.exe gfortran -c cb_func.f gfortran -c cb_main.f ################################################################################ ar cr libcb_static.a cb_func.o gfortran cb_main.o -L. -lcb_static -o cb_main_static ################################################################################ gfortran -shared -o libcb_dynamic.dll cb_func.o gfortran cb_main.o -L. -lcb_dynamic -o cb_main_dynamic ################################################################################ ./cb_main_static ./cb_main_dynamic ################################################################################