wross@caen.engin.umich.edu (Wendy Ross) (02/07/91)
Anyone else noticed a problem with newer Fortran compiler/library when linking? skylab is running the older version; the program compiles and links happily. elvedore is running the newer version; the compiler bombs out at link time with unresolved symbols. The reason is that the /usr/lib/libxlf.a library was changed between the two versions. When I took the older version of the library and used it with the newer version of the compiler, things worked fine. The nitty gritty details are as follows: OLDER VERSION OF FORTRAN: skylab% lslpp -h ... xlfrte.obj INACTIVE COMMIT 11/27/90 01.01.0000.0000 root INACTIVE APPLY 11/27/90 01.01.0000.0001 root ACTIVE COMMIT 11/27/90 01.01.0000.0001 root xlfrtemEn_US.msg ACTIVE COMMIT 11/27/90 01.01.0000.0000 root xlfcmp.obj INACTIVE COMMIT 11/27/90 01.01.0000.0000 root INACTIVE APPLY 11/27/90 01.01.0000.0001 root ACTIVE COMMIT 11/27/90 01.01.0000.0001 root ... skylab% xlf /tmp/p.f ** main === End of Compilation 1 === ** ttyint === End of Compilation 2 === ** pttyin === End of Compilation 3 === 1501-510 Compilation successful for file p.f. skylab% skylab% nm /usr/lib/libxlf.a | grep -i getenv U getenv 00001b90 T .getenv 00001b90 t .getenv 00000378 d getenv U .getenv 00000008 d .+GETENV_ 00000000 T .getenv_ 0000000c d GETENV_ 00000000 D getenv_ U .getenv 00000000 D #GETENV 0000000c d #GETENV 00000000 T .#GETENV 00000008 d .+#GETENV NEWER VERSION OF FORTRAN: elvedore% lslpp -h ... xlfrte.obj INACTIVE COMMIT 11/27/90 01.01.0000.0000 root INACTIVE APPLY 11/27/90 01.01.0000.0001 root INACTIVE COMMIT 11/27/90 01.01.0000.0001 root INACTIVE APPLY 11/30/90 01.01.0001.0002 root ACTIVE COMMIT 11/30/90 01.01.0001.0002 root xlfrtemEn_US.msg ACTIVE COMMIT 11/27/90 01.01.0000.0000 root xlfcmp.obj INACTIVE COMMIT 11/27/90 01.01.0000.0000 root INACTIVE APPLY 11/27/90 01.01.0000.0001 root INACTIVE COMMIT 11/27/90 01.01.0000.0001 root INACTIVE APPLY 11/30/90 01.01.0001.0004 root ACTIVE COMMIT 11/30/90 01.01.0001.0004 root xlfcmpmEn_US.msg ACTIVE COMMIT 11/27/90 01.01.0000.0000 root ... elvedore% xlf /tmp/p.f ** main === End of Compilation 1 === ** ttyint === End of Compilation 2 === ** pttyin === End of Compilation 3 === 1501-510 Compilation successful for file p.f. 0706-317 ERROR: Unresolved or undefined symbols detected: Symbols in error (followed by references) are dumped to the load map. .#GETENV .#SIGNAL elvedore% elvedore% nm /usr/lib/libxlf.a | grep -i getenv U getenv 00001b90 T .getenv 00001b90 t .getenv 00000370 d getenv U ._getenv 00000008 d .+GETENV_ 00000000 T .getenv_ 0000000c d GETENV_ 00000000 D getenv_ U ._getenv 00000008 d .+GETENV 00000000 T .getenv 0000000c d GETENV 00000000 D getenv Where /tmp/p.f is as follows: character*10 C C C integer getenv C i=getenv('SHELL',C) C call getenv('SHELL',C) write(6,'(a10)') C call ttyint pause stop end subroutine ttyint external pttyin C IBMRS/6000 C call signal(2,pttyin) C Apollos/Suns/Decs5000 integer signal k=signal(2,pttyin,-1) return end subroutine pttyin write(6,'(a32)') '**** Interrupt signal caught ...' write(6,*) 'enter a number' read(5,*) i write(6,*) 'number was ',i return end Hello Austin??? Wendy Ross wross@caen.engin.umich.edu Computer Aided Engineering Network University of Michigan, Ann Arbor <Insert amusing quip here>
shair@ux1.cso.uiuc.edu (Bob Shair) (02/07/91)
wross@caen.engin.umich.edu (Wendy Ross) writes: >Anyone else noticed a problem with newer Fortran compiler/library >when linking? I just had this come across my desk... it's probably not in quite the right format to send out on an external (non-IBM) forum like this, but I don't have enough knowledge to fix it, and the need for the information may well be urgent. = = = = = = = = = = = = = = = = = = = = = TITLE: 910116 XLF V1 ON AIX V3 (ICRA UPDATE 3003) There exist some differences between the XL Fortrans on releases of AIX prior to the ICRA update, and XL Fortran as available on the ICRA update. These differences can cause programs and/or libraries compiled prior to the ICRA update to fail at runtime and/or linktime on a RISC/6000 on which the ICRA update (3003) is installed. If you have routines or programs which use any of the following extensions to Fortran, you must take specific steps BEFORE installing the ICRA update: 1. getenv 2. signal 3. system It is best to perform the preemptive steps outlined here before attempting to install ICRA: 1. Login as root, or become the superuser. 2. Create a directory. 3. "cd" to the new directory. 4. Extract the following members from the current (3002) XL Fortran library: getenv.o, signal.o, system.o. The command to do so is: "ar vx /usr/lib/libxlf.a getenv.o signal.o system.o" 5. The output of the extraction should say: "x - getenv.o x - signal.o x - system.o" 6. Back up the extracted library members using your favorite backup utility (tar, backup, dd...). After installation of the ICRA update, you should restore the extracted files to some directory on your path, and makefiles should be modified to include these 3 routines. There have been examples of C language code used to extend or supplement XL Fortran which fail when recompiled on systems using the ICRA updates. Here is an example of such code with the corrected code to the right: /* 3002, not 3003 */ /* 3003 and 3002 */ #include <sys/types.h> #include <sys/types.h> long int loc(var) long int loc(var) long int var; int *var; { { long int loc; long int loc; loc = (long int)&var; loc = (long int)var; return(loc); return(loc); } } ---------- ---------- ---------- --------- ---------- ---------- -- Bob Shair shair@chgvmic1.iinus1.ibm.com Scientific Computing Specialist SHAIR@UIUCVMD (bitnet) IBM Champaign