[Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2174
  • Last Modified:

Using g77 to compile Fortran library on 64bit system

Hello,

I've encountered a problem compiling a library written in Fortran and C on a 64bit system. I've tested the library on a 32bit system and it is running fine, so the problem must be with how I compile it on a 64bit system, details: gcc 3.4.5 Suse 9.

The flags used to compile on 32 bit system are:

LARGE_FILE = -Dlinux -DFOPEN64
DEBUG =
#gcc flags
CFLAGS  = $(DEBUG) -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
#g77 flags
FFLAGS = $(DEBUG) -fno-second-underscore -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"

I have modified it for 64bit compilation by adding

-m64 to both CFLAGS and FFLAGS, the library still compiles but calls to some of its functions result in Segmentation fault.

After some playing around I discovered that adding an additional optimization flag -O3 solves some of the problems, that is some functions begin to work but eventually the thing still crashes.

If anyone can provide a proper procedure to compile under 64bit system that would help a lot.

Thank you!

Alex
0
alex123
Asked:
alex123
  • 2
1 Solution
 
grg99Commented:
There could be some 32-bit dependencies in the original code.  For example if some variables are declared as INTEGER * 4 in one common block, but as INTEGER in a supposedly parallel block, then the code would compile and work fine if the default integer is 32 bits, but will cause major kabooms if INTEGER becomes 64 bits.  

I'd look over all the parameters and common blocks to see if there might be some mismatches.

Also be wary of any library routines or precompiled routines you call-- they all have to be 64-bit compatible.

0
 
alex123Author Commented:
grg9 thank you!

I have a followup question to the original one. It seems that even on a 64bit system fortran's INTEGER type remains INTEGER*4 and not INTEGER*8. The library I am compiling might be suffering from this since it intefraces with some C code of its own and because of this the types passed between C and Fortran code no longer match. For my purposes I would also prefer to have all INTEGER types be equivalent to INTEGER*8. It there any way to force g77 to compile the library with INTEGER=INTEGER*8 instead of INTEGER*4?

Thank you
0
 
grg99Commented:
>It there any way to force g77 to compile the library with INTEGER=INTEGER*8 instead of INTEGER*4?

I don't see any option for that!  

You may be able to do it by adding IMPLICIT INTEGER * 8 ( I-N )  everywhere.

0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now