[mod.computers.vax] Linking C "non-shared" on Micro Vax

carl@CITHEX.CALTECH.EDU.UUCP (01/18/87)

Yes, if you want to avoid using shareable images, you use the object library
SYS$SHARE:VAXCRTL.OBJ.  No, you probably don't have the particulars correct:
There are very few good reasons for avoiding the use of shareable images, and
two very good reasons to do just the opposite.  The latter are:
    1)	You use memory more efficiently.  Once one image forces the loading
	of the code in a shareable image, that code stays in memory until
	nobody is using it, and you don't have to load any other copies of
	it.  Thus you reduce page faulting, and DISK/IO.
    2)	You use less disk space.  Images linked with the object library
	each contain a copy of the routines they use from that library.
	When linked with a shareable image, they contain a bit of information
	to let them find the entry points in the shareable image.  This
	can make the difference, say, between a 7-block executable and one
	that is well over 70 blocks in size, for a small program.  For larger
	programs, if they make extensive use of the system libraries, the
	difference can be even greater.  If you've got a fairly standard
	uVAX, one of the problems you're probably facing is the limited 
	amount of disk space available to you.

Now, as to the reasons for wanting to link with the object library:
    1)	You want to be able to move the code to a machine that doesn't
	have the library:
	A)  The other system has a different version of the library:
	    In this case, you should move the object modules, and link
	    them on the other system.  It is not guaranteed that one
	    version of the libraries will work on a system running a
	    different version, even if you link with the object library
	    and use the /NOSYSSHR flag.  DON'T DO IT.
	B)  The other system doesn't have ANY version of the library:
	    The VAX C Run Time Library is now a part of the basic VMS
	    package.  This is no longer an excuse for what you're proposing.