Annotation of 43BSDTahoe/new/help/src/f77/userlibs, revision 1.1.1.1

1.1       root        1: .TI F77/USERLIBS "Sep. 15, 1984"
                      2: Making Random Libraries from Object Files
                      3: 
                      4: A library is a single file which contains many different object files
                      5: plus an index to the contents of the library.  In UNIX, libraries are
                      6: "archives" and have names ending in ".a".  When loading, only the
                      7: needed object files are loaded from libraries mentioned in the f77
                      8: command.  To load a program requiring object files from library file
                      9: "mylib.a" in the current directory, type:
                     10: 
                     11:        f77 prog.o sub1.o ... mylib.a
                     12: 
                     13: This loads the object files prog.o, sub1.o, etc. and then loads those
                     14: object files in mylib.a that prog.o, sub1.o, ... reference.
                     15: 
                     16: Library names are listed at the end of the f77 command because
                     17: object files in the libraries are loaded only if the object files
                     18: are referenced by previously loaded object files.
                     19: 
                     20: The "ar" command creates and maintains archives on UNIX.  Here
                     21: is a simple example that compiles three subroutines and adds them
                     22: to the archive mylib.a:
                     23: 
                     24: .nf
                     25:        f77 -c sub1.f sub2.f sub3.f 
                     26:        ar uv mylib.a  sub1.o sub2.o sub3.o
                     27: .fi
                     28: 
                     29: Ar will respond with "a - sub.o" when a file is first inserted (appended) into
                     30: the archive.
                     31: We could use the same ar command to replace already existing
                     32: object files in the archive.  Ar responds with "r - sub.o" when a file is
                     33: updated (replaced) in the archive.
                     34: 
                     35: Use ranlib to add a random table of contents to the archive, converting it to a
                     36: library:
                     37: 
                     38:        ranlib mylib.a
                     39: 
                     40: To see what .o files are in a library or archive, type:
                     41: 
                     42:        ar tv mylib.a
                     43: 
                     44: To see what subprograms, entry points, and common blocks are referenced
                     45: by the .o files in an archive, type:
                     46: 
                     47:        nm -g mylib.a
                     48: 
                     49: The loader checks whether the random index of a library is up to date
                     50: or not by comparing the date within the file to the modification date
                     51: of the file.  Because of this, if you use the 'cp' command to make a
                     52: second copy of a library, the loader thinks the random index for the
                     53: library is out of date, ignores it and issues a warning:
                     54: 
                     55: .nf
                     56:        % cp  libnew.a  mylib.a
                     57:        % f77  prog.o  mylib.a
                     58:        ld:mylib.a: warning: table of contents for archive is out
                     59:           of date; rerun ranlib(1)
                     60: .fi
                     61: 
                     62: Instead, either use the 'mv' command if you just want to change the
                     63: name or path of the library,
                     64: or use the 'tar' command if you really want to make an identical copy.
                     65: To use 'tar', first move into the directory containing the library.
                     66: Then issue the command:
                     67: 
                     68:        tar cBf - libnew.a | ( cd ~/newdir ; tar xBf - libnew.a )
                     69: 
                     70: This copies libnew.a to ~/newdir/libnew.a.  Tar creates the new file
                     71: with the same modification date as the original file so that you do
                     72: not need to rerun ranlib.  Notice that the name of the library, libnew.a,
                     73: appears twice in the command line and must be identical in both positions.
                     74: If you want the copy of the library to have a different name, follow
                     75: the tar with a mv command.
                     76: 
                     77: To copy a library across systems, use tar together with rsh; e.g. to
                     78: copy mylib.a on opal to ~/mybin/mylib.a on populi, type the
                     79: following on opal:
                     80: 
                     81: .nf
                     82:        tar cBf - mylib.a \\
                     83:                 | rsh populi "( cd mybin; tar xBf - mylib.a )"
                     84: .fi
                     85: 
                     86: For large libraries, you may want to check if there were transmission errors
                     87: by comparing the copy to the original:
                     88: 
                     89:        rsh populi cat mylib.a | cmp - mylib.a
                     90: 
                     91: For more information, see ar(1), ld(1), nm(1), ranlib(1), and rsh(1) in the
                     92: UNIX Programmer's Manual.
                     93: 
                     94: For information of importance in dealing with large libraries, see "help
                     95: f77 biglibs".

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.