<<

Reuse in a Environment

 Two commonly reused software objects in Unix Lecture 11: Unix Libraries environments  source code

 object code

 Source code Reuse Kenneth M. Anderson  Pro: Can modify to suit new context  Con: MUST modify to suit new context Software Methods and Tools  Object code Reuse CSCI 3308 - Fall Semester, 2004  Pro: No compilation required; just header and lib  Con: No ability to change functionality; Arch-specific

September 27, 2004 © University of Colorado, 2004 2

Libraries Creating a

 Unix Library  Compile . files to create .o files

 a collection of object files, used for some purpose  Use the ar to create a library from  e.g. math libraries, graphics libraries, etc. the .o files

 Can be reused in other programs  The .o files are stored in the archive such that they  The rules of marshalling (covered in last lecture) can be extracted a later

ensure that the compiler knows how to call the  This allows a to be smart about using the object code contained in the library object code in libraries

 Remember that object code is architecture-specific  e.g. only those functions used are placed in the linked executable

September 27, 2004 © University of Colorado, 2004 3 September 27, 2004 © University of Colorado, 2004 4 Example Example, continued

 main.c  v1.c  First, compile the support files #include “main.h” int verb() {  g++ -c s1.c main(){ (“codes.”); subject(); }  g++ -c s2.c verb();  v2.c  g++ -c v1.c } int verb(){  g++ -c v2.c  s1.c printf(“debugs.”); int subject() { }  Second, create two different libraries printf(“Jane ”);  main.h  ar -r libWords1.a s1.o v1.o } int subject();  ar -r libWords2.a s2.o v2.o  s2.c int verb(); int subject(){  This creates two separate libraries printf(“Ken ”);  libWords1.a and libWords2.a }

September 27, 2004 © University of Colorado, 2004 5 September 27, 2004 © University of Colorado, 2004 6

Checking library contents Example, continued

 ar -t libWords1.a  libWords1.a  Third, compile main  …  s1.o  g++ -c main.c  Jane  v1.o  codes.  Fourth, executable  …  ar -t libWords2.a  g++ main.o -o main1 -lWords1  strings libWords2.a  s2.o  g++ main.o -o main2 -lWords2  …  v2.o  Ken  Fifth, run programs  debugs.  main1 -> Jane codes.  ...  main2 -> Ken debugs.

September 27, 2004 © University of Colorado, 2004 7 September 27, 2004 © University of Colorado, 2004 8 on ar command ar command syntax

 ar is the ARchive command ar (d|q|r|t) archive [files…]  r - Replace  It is similar to : Tape Archive  replace .o files in archive with specified files  Both store multiple files as a single collection  q - Quick append  ar focuses on storing .o files to create libraries  append specified files to archive

 The similarity ends there  d - Delete  delete specified files from archive  the command flags and behavior of these  t - Table of Contents commands are sometimes quite different  print table of contents of archive  Note: This is just a sample of ar’s functionality; see the ar for more details

September 27, 2004 © University of Colorado, 2004 9 September 27, 2004 © University of Colorado, 2004 10

Using Unix Libraries More on include directories

 In order to use a Unix library, a compiler needs to  Any source file that wants to use of a library, know the location of the library, the location of its must include its header file

include file, and its name  The -I flag specifies a directory name for this  Unix compilers (g++, gcc, and cc) have command purpose

flags that let you specify this information  When a compiler encounters a “#include” statement,  -I Directory for include files (uppercase i) it looks in the current directory and the directory  -L Directory for Libraries specified by the -I flag for the file  -l Name of library (lowercase L)

September 27, 2004 © University of Colorado, 2004 11 September 27, 2004 © University of Colorado, 2004 12 More on Library directories More on Library names

 The -L option specifies a directory where Unix  The -l flag (lowercase L) specifies the name libraries are stored of a Unix library  When a linker needs to a library (in order to  The compiler assumes that all libraries begin link it into an executable), the linker will look in the directory specified by the -L flag with “lib” and end in “.a”

 Note: you can have more than one -L and -I flags in  As such, you “-lmath” rather than a single command “-llibmath.a”

 The latter would cause the compiler to look for a file called liblibmath.a.a!

September 27, 2004 © University of Colorado, 2004 13 September 27, 2004 © University of Colorado, 2004 14

Brooks’ Corner: Note: Order is significant Why Did The Tower of Babel Fail?

 The order of -l flags is significant  Communication, (the lack of it)

g++ main.c -o main -lWords1 -lWords2  This made it impossible to coordinate

 produces  How do you communicate in large project teams?

 “Jane codes.”  Informally (telephone, e-), meetings, workbook

 The object code in Words2 is ignored because the  Workbook

linker found matches for subject() and verb() in  It is a structure placed on a project’s documents

Words1  Why is it important? Technical prose lives a long time; best  Swapping the libraries in the above command to get it structured formally from the beginning; it also helps produces with the distribution of information

 “Ken debugs.”

September 27, 2004 © University of Colorado, 2004 15 September 27, 2004 © University of Colorado, 2004 16 More on the Workbook Reducing communication paths

 OS/360  Communication needs are reduced by  division of labor  Each programmer should see all the material  specialization of function  Each book was updated quickly (one-day)  A structure often results from applying this  Problem principle  The workbook grew to 5 feet thick!  However this serves power structures better than  They switched to microfiche communication (since communication between siblings is  We need to take advantage of on-line artifacts, often needed) information management techniques like open  So communication structure is often a network hypermedia, information retrieval, and the WWW

September 27, 2004 © University of Colorado, 2004 17 September 27, 2004 © University of Colorado, 2004 18

Organizational Structure

 Brooks outlines

 mission, producer, director, schedule, division of labor, and interfaces between the parts

 The new items are the producer and the director

 producer: manages project and obtains resources

 director: manages technical details

 Microsoft’s program and product manager

 former is director, latter does more marketing than Brooks specifies for producer but has some overlap

September 27, 2004 © University of Colorado, 2004 19