home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / lang / modula3 / 842 < prev    next >
Encoding:
Text File  |  1992-07-21  |  3.7 KB  |  93 lines

  1. Path: sparky!uunet!mcsun!uknet!cam-cl!cam-cl!os102
  2. From: os102@cl.cam.ac.uk (Oliver Stephens)
  3. Newsgroups: comp.lang.modula3
  4. Subject: Shared Libraries under SunOS
  5. Message-ID: <1992Jul21.151044.4471@cl.cam.ac.uk>
  6. Date: 21 Jul 92 15:10:44 GMT
  7. Sender: news@cl.cam.ac.uk (The news facility)
  8. Reply-To: oliver.stephens@computer-lab.cambridge.ac.uk
  9. Organization: Computer Lab, University of Cambridge, UK
  10. Lines: 81
  11.  
  12. More stuff on shared libraries under SunOS :
  13.  
  14.   1. You don't need the contents of lib<name>.a if you have lib<name>.so.*
  15.      as programs are never linked with -Bstatic (at least I cannot think of
  16.      any reason why they should).  You do, however, need a file of that name
  17.      for the driver to work correctly, so you can replace it with a zero-length
  18.      file to save more disc space
  19.  
  20.   2. Below are some m3make templates for creating shared libraries
  21.      automatically.  They give you two new directives :
  22.  
  23.        sharedLibrary(name)  - equivalent of library(name)
  24.        SharedLibrary(name)  - equivalent of Library(name)
  25.  
  26.      There are three (at least) minor gotchas :
  27.  
  28.        A. If you have a lib<name>.a but no lib<name>.so.* then the driver
  29.           won't bother to rebuild : solution - remove lib<name>.a
  30.  
  31.        B. If the link fails (usually because some of the source files have
  32.           not been compiled with a shared library target in mind) then the
  33.           driver ignores it - this is because I replace the archive pass of
  34.           the driver with a link pass, but the driver ignores the exit status
  35.           of this pass : solution - remove all object files [m3make clean]
  36.           before starting a shared library build
  37.  
  38.        C. If an installed lib<name>.a already exists (from a previous ordinary
  39.           library build) then it will not change to zero-length when you
  40.           install the shared library - this is because I use 'touch' to create
  41.           the file : solution - change it to a zero-length file by hand or
  42.           delete it first (if you want the extra disk space)
  43.  
  44. ---+--- The following should go in your $(LIB_USE)/toplevel.tmpl file ---+---
  45.  
  46. #ifdef TARGET_SPARC
  47.  
  48. #define sharedLibrary(name)                                            @@\
  49. all:: lib##name.a                                                      @@\
  50. clean:: ; rm -f lib##name.a lib##name.ax lib##name.so.1.1              @@\
  51. lib##name.a: FRC; $(DO_M3) -X1@-PIC@ -Y3@$(LIB_USE)/ld-so@ -Y4@touch@  \
  52. -a lib##name.a $(PGM_SOURCES) $(IMPORT_LIBS)
  53.  
  54. #define SharedLibrary(name)                                            @@\
  55. install::                                                              @@\
  56.         INSTALL (lib##name.so.1.1, $(LIB_INSTALL), 755)                @@\
  57.         INSTALL (lib##name.ax, $(LIB_INSTALL), 644)                    @@\
  58.         touch $(LIB_INSTALL)/lib##name.a                               @@\
  59. sharedLibrary(name)
  60.  
  61. #else
  62.  
  63. #define sharedLibrary(name)  library(name)
  64. #define SharedLibrary(name)  Library(name)
  65.  
  66. #endif
  67.  
  68. ---+--- And the following shell script should go in $(LIB_USE)/ld-so ---+---
  69.  
  70. #!/bin/csh -f
  71. #
  72. # ld-so : shared library linker for m3
  73. #
  74. # (just a simple shell around /bin/ld which changes the arguments
  75. #  so that shared libraries can be created - needed because I don't
  76. #  have enough control over the commands the m3 driver issues)
  77. #
  78. # Olly Stephens (os102@cl.cam.ac.uk) - 20/7/92
  79. #
  80.  
  81. set argv[1]=-o                   # change 'cru' to '-o'
  82. set argv[2]=$2:r.so.1.1          # change <lib>.a to <lib>.so.1.1
  83.  
  84. /bin/ld -assert pure-text $*
  85.  
  86. ---+---
  87.  
  88. -------------------------------------------------------------------------
  89. Olly Stephens                                oliver.stephens@cl.cam.ac.uk
  90. Computer Laboratory
  91. University of Cambridge    Loved you there and then, and now like a sheep
  92. United Kingdom                                             - Van Morrison
  93.