cmpsc 311 introduction to systems programming module
play

CMPSC 311- Introduction to Systems Programming Module: Build - PowerPoint PPT Presentation

CMPSC 311- Introduction to Systems Programming Module: Build Processing Professor Patrick McDaniel Fall 2016 CMPSC 311 - Introduction to Systems Programming UNIX Pipes Pipes | are ways of redirecting the output of one command to


  1. CMPSC 311- Introduction to Systems Programming Module: Build Processing Professor Patrick McDaniel Fall 2016 CMPSC 311 - Introduction to Systems Programming

  2. UNIX Pipes • Pipes “ | ”are ways of redirecting the output of one command to the input of another ‣ Make STDOUT for one program the STDIN for the next ‣ For example, mcdaniel@ubuntu:~/siis/courses/cmpsc311-f13/docs/assign/assign2$ cat numbers.txt 313.11 45.64 9.50 113.89 mcdaniel@ubuntu:~/siis/courses/cmpsc311-f13/docs/assign/assign2$ cat numbers.txt | sort -n 9.50 45.64 113.89 313.11 mcdaniel@ubuntu:~/siis/courses/cmpsc311-f13/docs/assign/assign2$ UNIX: the “ cat ” command prints the content of a file to the terminal. UNIX: the “ sort ” sorts the lines of input and prints to the terminal. 2 CMPSC 311 - Introduction to Systems Programming Page

  3. Assignment #2 “trick” • You can use pipes to test your program more quickly mcdaniel@ubuntu:~/siis/courses/cmpsc311-f13/docs/assign/assign2$ cat inputs.txt | ./cmpsc311-f13-assign2 ********************************************************************* Received and computed values 9.50 45.64 313.11 113.89 81.56 250.00 11.90 469.98 313.11 4.68 34.33 8013.55 -10.15 11.50 88.00 10 46 313 114 82 250 12 470 313 5 34 8014 -10 12 88 The largest element of the float array is 8023.75 The largest element of the int array is 8014 ********************************************************************* Altered values .... 3 CMPSC 311 - Introduction to Systems Programming Page

  4. Building a program 101 • There are two phases of building a program, compiling and linking ‣ gcc is used to build the program ‣ ld can be used to link the program (or gcc) 4 CMPSC 311 - Introduction to Systems Programming Page

  5. Compiling a program • You will run a command to compile gcc <source code> [options] • Interesting options ‣ -c (tells the compiler to just generate the object files) ‣ -Wall (tells the compiler to show all warnings) ‣ -g (tells the compiler to generate debug information) ‣ -o <filename>.o (write output to file) • An example gcc hello.c -c -Wall -g -o hello.o 5 CMPSC 311 - Introduction to Systems Programming Page

  6. Linking a program • You will run a command to link gcc <object files> [options] • Interesting options ‣ -l<lib> (link with a library) ‣ -g (tells the compiler to generate debug information) ‣ -o <filename> (write output to file) • An example, gcc hello.o goodbye.o -g -lmyexample -o hello 6 CMPSC 311 - Introduction to Systems Programming Page

  7. What is a “static” library? • A library is a collection of Program related code and functions LINKER that are “linked” against a <printf?> Program C program. libc ‣ The library “exports ” “ symbols ” open() { … } ‣ You program object code has write() { … } printf() { … } “ unresolved symbols ” in the code ‣ The linker pulls chunks of the library containing those symbols and places them into the program ‣ The program is done when all the pieces are resolved ‣ Is is called “static” linking because this is done at link time CMPSC 311 - Introduction to Systems Programming Page

  8. Building a static library • A statically linked library produces object code that is inserted into program at link time. ‣ You are building an “archive” of the library which the linker uses to search for and transfer code into your program. ‣ To run the command, use ar rcs lib<libname>.a <object files> • Library naming: with very few exceptions all static libraries are named lib???.a , e.g., ar rcs libmyexample.a a.o b.o c.o d.o • You link against the name of the library, not against the name of the file in which the library exists ( see linking ) 8 CMPSC 311 - Introduction to Systems Programming Page

  9. Building a static library • A statically linked library produces object code that is inserted into program at link time. ‣ You are building an “archive” of the library which the linker uses to search for and transfer code into your program. ‣ To run the command, use ar rcs lib<libname>.a <object files> • Library naming: with very few exceptions all static R - replace existing code with the objects passed libraries are named lib???.a , e.g., C - create the library if needed S - create an index for “relocatable code” ar rcs libmyexample.a a.o b.o c.o d.o • You link against the name of the library, not against the name of the file in which the library exists ( see linking ) 9 CMPSC 311 - Introduction to Systems Programming Page

  10. What is a “dynamic” library? • A dynamic library is a Program collection of related code LOADER and functions that are <printf?> Program “resolved” at run time. libc ‣ The library “exports ” “ symbols ” open() { … } ‣ You program object code has write() { … } printf() { … } “ unresolved symbols ” in the code ‣ The loader pulls chunks of the library containing those symbols and places them into the process ‣ The symbols are resolved when the process is started or later during execution ‣ Is is called “dynamic” because it can be done any time … CMPSC 311 - Introduction to Systems Programming Page

  11. Building a dynamic library • A dynamically linked library produces object code that is inserted into program at execution time. ‣ You are building an loadable versions of the library which the loader uses to launch the application ‣ To run the command, pass to gcc using “ -shared ”, e.g., gcc -shared -o libmyexample.so a.o b.o c.o d.o • Important: all object files to be placed in library must have been compiled to position-independent code (PIC) ‣ PIC is not dependent on an placement in memory ‣ e.g., always uses relative jumps, so does not matter where it is loaded at execution time • Naming: same as before, only with .so extension 11 CMPSC 311 - Introduction to Systems Programming Page

  12. Building a dynamic library • A dynamically linked library produces object code that is inserted into program at execution time. ‣ You are building an loadable versions of the library which the loader uses to launch the application ‣ To run the command, pass to gcc using “ -shared ”, e.g., gcc -shared -o libmyexample.so a.o b.o c.o d.o gcc a.c -fpic -c -Wall -g -o a.o • Important: all object files to be placed in library must have been compiled to position-independent code (PIC) ‣ PIC is not dependent on an placement in memory ‣ e.g., always uses relative jumps, so does not matter where it is loaded at execution time • Naming: same as before, only with .so extension 12 CMPSC 311 - Introduction to Systems Programming Page

  13. The C Preprocessor • The preprocessor processes input source code files for commands that setup the compile environment specific to that execution. ‣ The programmer uses “ # ” directives to indicate what he wants that program to do. ‣ We have seen one of these before, “ #include ” ‣ There are more ... 13 CMPSC 311 - Introduction to Systems Programming Page

  14. #include • The #include directive tells the compiler to include data from some other data file. ‣ #include “foo.h” - this tells the compiler to look in the local directory for the include file • (used for application programming) ‣ #include <foo.h> - tells the compiler to look at the default directories and any provided by the command line. • The gcc -I<path> option ‣ tells the compiler to look in a specific directory for include files (that are using the <....h> approach) ‣ Generally speaking, systems programming uses the <> to have better control over what is being included from where. 14 CMPSC 311 - Introduction to Systems Programming Page

  15. #define • The #define directive allows the user to create a definition symbol that gets search/replaced throughout ‣ commonly used to define a constant that might be changed in the future, e.g., the sizes of arrays ... ‣ The #undef directive undoes this binding … #define NUMBER_ENTRIES 15 ... int main( void ) { // Declare your variables here float myFloats[ NUMBER_ENTRIES ]; // Read float values for ( i=0; i< NUMBER_ENTRIES ; i++ ) { scanf( "%f", &myFloats[i] ); } 15 CMPSC 311 - Introduction to Systems Programming Page

  16. #define macros • #define can also be used to create simple functions called macros /* Defining a function to swap pairs of integers */ #define swap(x,y) {int temp=x; x=y; y=temp;} int main( void ) { // Declare your variables here int i = 1, j =2; ... swap (i,j); • Macros are not “called” as normal functions, but are replaced during preprocessing ‣ (thus no function call overheads) 16 CMPSC 311 - Introduction to Systems Programming Page

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend