Callable SuperMongo
Hi everyone,
I am trying to get MOOG running on my new linux box at the office (Ubuntu 9.04) and am having a hard time getting the callable SuperMongo libraries to behave correctly.
After following the helpful directions here, I've got SM compiled and running normally on the machine. I'm using SM 2.4.30, compiling with gcc and gfortran.
The weird thing is that the C example programs in the 'callable' directory work, but the Fortran examples all die when linking, saying that the various SM functions can not be found.
What could cause the C libraries to link properly, but not the Fortran ones? I've tried a bunch of combinations to no avail. Any help is greatly appreciated!
Ryan
=====
make test gfortran -c -g -c test.f gfortran -o test test.o -L../src -lplotsub -ldevices -lutils -lX11 -lm test.o: In function `MAIN__': /home/User/sm2_4_30/callable/test.f:8: undefined reference to `sm_device_' /home/User/sm2_4_30/callable/test.f:19: undefined reference to `sm_graphics_' /home/User/sm2_4_30/callable/test.f:20: undefined reference to `sm_defvar_' /home/User/sm2_4_30/callable/test.f:21: undefined reference to `sm_defvar_' /home/User/sm2_4_30/callable/test.f:22: undefined reference to `sm_expand_' /home/User/sm2_4_30/callable/test.f:23: undefined reference to `sm_window_' /home/User/sm2_4_30/callable/test.f:24: undefined reference to `sm_limits_' /home/User/sm2_4_30/callable/test.f:25: undefined reference to `sm_ticksize_' /home/User/sm2_4_30/callable/test.f:26: undefined reference to `sm_box_' /home/User/sm2_4_30/callable/test.f:27: undefined reference to `sm_gflush_' /home/User/sm2_4_30/callable/test.f:28: undefined reference to `sm_alpha_' /home/User/sm2_4_30/callable/test.f:30: undefined reference to `sm_graphics_' /home/User/sm2_4_30/callable/test.f:31: undefined reference to `sm_curs_' /home/User/sm2_4_30/callable/test.f:32: undefined reference to `sm_alpha_' /home/User/sm2_4_30/callable/test.f:34: undefined reference to `sm_graphics_' /home/User/sm2_4_30/callable/test.f:35: undefined reference to `sm_window_' /home/User/sm2_4_30/callable/test.f:36: undefined reference to `sm_location_' /home/User/sm2_4_30/callable/test.f:37: undefined reference to `sm_erase_' /home/User/sm2_4_30/callable/test.f:38: undefined reference to `sm_limits_' /home/User/sm2_4_30/callable/test.f:39: undefined reference to `sm_ticksize_' /home/User/sm2_4_30/callable/test.f:40: undefined reference to `sm_box_' /home/User/sm2_4_30/callable/test.f:41: undefined reference to `sm_angle_' /home/User/sm2_4_30/callable/test.f:42: undefined reference to `sm_ptype_' /home/User/sm2_4_30/callable/test.f:43: undefined reference to `sm_points_' /home/User/sm2_4_30/callable/test.f:44: undefined reference to `sm_angle_' /home/User/sm2_4_30/callable/test.f:45: undefined reference to `sm_lweight_' /home/User/sm2_4_30/callable/test.f:46: undefined reference to `sm_expand_' /home/User/sm2_4_30/callable/test.f:47: undefined reference to `sm_identification_' /home/User/sm2_4_30/callable/test.f:48: undefined reference to `sm_expand_' /home/User/sm2_4_30/callable/test.f:49: undefined reference to `sm_xlabel_' /home/User/sm2_4_30/callable/test.f:50: undefined reference to `sm_ylabel_' /home/User/sm2_4_30/callable/test.f:51: undefined reference to `sm_errorbar_' /home/User/sm2_4_30/callable/test.f:52: undefined reference to `sm_errorbar_' /home/User/sm2_4_30/callable/test.f:53: undefined reference to `sm_lweight_' /home/User/sm2_4_30/callable/test.f:54: undefined reference to `sm_histogram_' /home/User/sm2_4_30/callable/test.f:55: undefined reference to `sm_lweight_' /home/User/sm2_4_30/callable/test.f:56: undefined reference to `sm_ltype_' /home/User/sm2_4_30/callable/test.f:57: undefined reference to `sm_conn_' /home/User/sm2_4_30/callable/test.f:58: undefined reference to `sm_ltype_' /home/User/sm2_4_30/callable/test.f:59: undefined reference to `sm_relocate_' /home/User/sm2_4_30/callable/test.f:60: undefined reference to `sm_label_' /home/User/sm2_4_30/callable/test.f:61: undefined reference to `sm_dot_' /home/User/sm2_4_30/callable/test.f:62: undefined reference to `sm_draw_' /home/User/sm2_4_30/callable/test.f:63: undefined reference to `sm_putlabel_' /home/User/sm2_4_30/callable/test.f:64: undefined reference to `sm_grid_' /home/User/sm2_4_30/callable/test.f:65: undefined reference to `sm_ltype_' /home/User/sm2_4_30/callable/test.f:66: undefined reference to `sm_grid_' /home/User/sm2_4_30/callable/test.f:67: undefined reference to `sm_ltype_' /home/User/sm2_4_30/callable/test.f:68: undefined reference to `sm_gflush_' /home/User/sm2_4_30/callable/test.f:69: undefined reference to `sm_alpha_' /home/User/sm2_4_30/callable/test.f:71: undefined reference to `sm_redraw_' /home/User/sm2_4_30/callable/test.f:74: undefined reference to `sm_redraw_' /home/User/sm2_4_30/callable/test.f:76: undefined reference to `sm_hardcopy_' collect2: ld returned 1 exit status make: *** [test] Error 1
- Forums:
Who's online
There are currently 0 users and 0 guests online.

Fixed!
I finally fixed this tonight: the key was that by default, gfortran only appends a single underscore to function names in the object file it creates, whereas g77 and most other compilers add two underscores. Options.h was set up to follow along with the two underscore convention by default, but gfortran requires extra switches to force it to use two.
To compile something (i.e. MOOG) you must use a process similar to this in the makefile:
F77=gfortran FFLAGS = -g .f.o : $(F77) -std=legacy -ff2c -c $(FFLAGS) $*.f test : test.o $(F77) -g -o test test.o $(LDFLAGS)One other thing that I had to do was to change the passed arguments from (what I assume) the double that they were (1.0001D0) to a float (1.0001) since I didn't compile in double precision.
I also reformatted the test programs in the 'callable' directory, changing them to a fixed format (easier for me to read, though I don't know if it was necessary).
Doing this, I've now got MOOG up and running and making me pretty plots!