11
ההההה ההההה הההההה הההההה ההההה ההההההה הההההה ההההה89-210 םםםםם םםםםם1 - םםםםם4 Shared Libraries Shared Libraries ההההה הההה'ה םםםםם םםםםם םםםםם םםםםם2 2 89-211 89-211 ההההה הההה4 ההה"ה2010-2011

Shared Libraries

Embed Size (px)

DESCRIPTION

Shared Libraries. תכנות מתקדם 2 89-211 תרגול מספר 4 תשע"א 2010-2011. אליהו חלסצ'י. למה צריך ספריות משותפות? שימוש ברכיבים סטנדארטיים Reuse לקוד עבודה במקביל של כמה מתכנתים ניתן לקמפל רק את הרכיב שהשתנה, ולבצע linkage מחדש, בלי הצורך לקמפל את הכל שוב - PowerPoint PPT Presentation

Citation preview

Page 1: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

Shared LibrariesShared Libraries

אליהו חלסצ'י

89-21189-211 22תכנות מתקדם תכנות מתקדם 4תרגול מספר

2010-2011תשע"א

Page 2: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

הקדמהלמה צריך ספריות משותפות?•

שימוש ברכיבים סטנדארטיים––Reuseלקוד עבודה במקביל של כמה מתכנתים–ניתן לקמפל רק את הרכיב שהשתנה, ולבצע –

linkageמחדש, בלי הצורך לקמפל את הכל שוב

מחבר תוכניות מחשב שעברוlinkerה •הידור לכדי תוכנית אחת שניתנת

להרצה ע"י מערכת הפעלה מסוימת

Page 3: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

הקדמהניתן לייצר ספריות סטאטיות ומשותפות•ניתן להשתמש במשותפות בצורות:•

–Dynamic linking–Dynamic loading

קימפול רגיל הוא•סטאטי פרט לספריות

הסטנדארטיות( יכיל את כל המידע static-קימפול סטאטי מלא )•

outputהדרוש בקובץ ה ref יכיל בקובץ הריצה dynamic linkingקימפול מסוג •

המשותף ובזמן ריצה ייגש אליוso.לקובץ ה הוא דינאמי לחלוטיןdynamic loadingקימפול מסוג •

Page 4: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

יצירת ספרייה משותפת עם מס' פונקציות שנרצה Cתחילה ניצור קובצי •

שלהם(h.)ניצור גם את ה לשתף:

double add(double a, double b) {

return a+b;

}

double sub(double a, double b) {

return a-b;

}

double mul(double a, double b) {

return a*b;

}

double div(double a, double b) {

return a/b;

}

double avg(double a, double b) {

return (a+b)/2;

}

double max(double a, double b) {

if(a>b) return a;

else return b;

}

double min(double a, double b) {

if(a<b) return a;

else return b;

}

myMath.c myMath2.c

Page 5: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

יצירת ספרייה משותפת ע"י קימפול:object filesכעת ניצור מהם •

קיבלנו את הקבצים:•

gcc -c myMath.c -o myMath.o

gcc -c myMath2.c -o myMath2.o

eli@eli-desktop:~/test2$ ls -ltotal 24-rw-r--r-- 1 eli eli 198 2009-03-29 16:21 myMath2.c-rw-r--r-- 1 eli eli 97 2009-03-29 16:21 myMath2.h-rw-r--r-- 1 eli eli 1012 2009-03-29 16:22 myMath2myMath2..oo-rw-r--r-- 1 eli eli 197 2009-03-29 16:13 myMath.c-rw-r--r-- 1 eli eli 129 2009-03-29 16:14 myMath.h-rw-r--r-- 1 eli eli 878 2009-03-29 16:20 myMathmyMath..oo

-o לצורך ציון שם קובץ ה output, -c.לצורך קימפול ללא שלב הלינק

Page 6: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

יצירת ספרייה משותפת ניצור ע"י הפקודה:סטאטיתסטאטיתספרייה •

–ar מלשון archive." a." ויסתיים ב "libשם הספרייה יתחיל ב "–

רשימת•הקבצים

כעת:

ar rcs libmyMath.a myMath.o myMath2.o

eli@eli-desktop:~/test2$ ls -ltotal 28-rw-r--r-- 1 eli eli 2138 2009-03-29 16:23 libmyMathlibmyMath..aa-rw-r--r-- 1 eli eli 198 2009-03-29 16:21 myMath2.c-rw-r--r-- 1 eli eli 97 2009-03-29 16:21 myMath2.h-rw-r--r-- 1 eli eli 1012 2009-03-29 16:22 myMath2.o-rw-r--r-- 1 eli eli 197 2009-03-29 16:13 myMath.c-rw-r--r-- 1 eli eli 129 2009-03-29 16:14 myMath.h-rw-r--r-- 1 eli eli 878 2009-03-29 16:20 myMath.o

r להכניס את ה obj files ,לספרייה ולהחליף אם קיימים c ,ליצור את הספרייה אם לא קיימת s לתחזק את ה symbol table

Page 7: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

יצירת ספרייה משותפת )לשימוש דינאמי( נצטרך משותפתמשותפתכדי ליצור ספרייה •

ללא תלות במקומם ע"י object filesתחילה ליצור fPIC Position Independent Code–הפרמטר

כעת ניתן לקמפל ע"י:•

נוצר הקובץ:•

gcc -c -fPIC myMath.c -o myMath.o

gcc -c -fPIC myMath2.c -o myMath2.o

gcc -shared -Wl,-soname,libmyMath.so.1 -o libmyMath.so.1.0.1 myMath.o myMath2.o

-rw-r--r-- 1 eli eli 2138 2009-03-29 16:23 libmyMath.a-rwxr-xr-x 1 eli eli 5886 2009-03-29 16:39 libmyMath.so.1.0.1libmyMath.so.1.0.1

Page 8: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

שימוש בספרייה משותפתתחילה ניצור את התוכנית שמשתמשת •

בפונקציות המשותפות:

כעת נקמפל בעזרת לינק•סטאטי ע"י:

ובעזרת לינק דינאמי ע"י:•

#include <stdio.h>

#include "myMath.h"

#include "myMath2.h"

int main)int argc, char* argv[]( {

double v1, v2, m;

v1 = 5.2;

v2 = 7.9;

m = avg)v1, v2(;

printf)"The avg of %3.2f and %3.2f is %3.2f\n", v1, v2, m(;

m = max)v1, v2(;

printf)"The max of %3.2f and %3.2f is %3.2f\n", v1, v2, m(;

m = min)v1, v2(;

printf)"The min of %3.2f and %3.2f is %3.2f\n", v1, v2, m(;

return 0;

}

main.c

gcc -static main.c -L. -lmyMath -o statically_linked

gcc main.c -o dynamically_linked -L.. -lmyMath

-L ,לצורך הגדרת התיקייה בה הלינקר יחפש את הספרייה -l לצורך הגדרת שם הספרייה libname.so.

Page 9: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

שימוש בספרייה משותפת:dynamic loadingדוגמא ל •

נקמפל ע"י:•

פלט עבור ההרצות•

#include <stdio.h>

#include <dlfcn.h>

#include "myMath.h"

#include "myMath2.h"

int main)int argc, char* argv[]( {

double v1, v2, m;

v1 = 5.2;

v2 = 7.9;

void *dl_handle;

double )*func()double, double(;

dl_handle=dlopen)"./libmyMath.so.1.0.1",RTLD_LAZY(;

func=dlsym)dl_handle,"avg"(;

m=)*func()v1,v2(;

printf)"The avg of %3.2f and %3.2f is %3.2f\n", v1, v2, m(;

func=dlsym)dl_handle,"max"(;

m=)*func()v1,v2(;

printf)"The max of %3.2f and %3.2f is %3.2f\n", v1, v2, m(;

func=dlsym)dl_handle,"min"(;

m=)*func()v1,v2(;

printf)"The min of %3.2f and %3.2f is %3.2f\n", v1, v2, m(;

dlclose)dl_handle(;

return 0;}

main2.c

gcc -rdynamic -o dynamically_loaded main2.c -ldl

./dynamically_linked

./statically_linked

./dynamically_loaded

The avg of 5.20 and 7.90 is 6.55The max of 5.20 and 7.90 is 7.90The min of 5.20 and 7.90 is 5.20

Page 10: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

שימוש בספרייה משותפתנשווה את גודל הקבצים שהתקבלו:•

-rwxr-xr-x 1 eli eli 6969 2009-03-29 16:43 dynamically_linkeddynamically_linked-rwxr-xr-x 1 eli eli 7642 2009-03-29 23:57 dynamically_loadeddynamically_loaded-rw-r--r-- 1 eli eli 2138 2009-03-29 16:23 libmyMath.a-rwxr-xr-x 1 eli eli 5886 2009-03-29 16:39 libmyMath.so.1.0.1-rw-r--r-- 1 eli eli 645 2009-03-29 23:56 main2.c-rw-r--r-- 1 eli eli 404 2009-03-29 16:41 main.c-rw-r--r-- 1 eli eli 198 2009-03-29 16:21 myMath2.c-rw-r--r-- 1 eli eli 97 2009-03-29 16:21 myMath2.h-rw-r--r-- 1 eli eli 1272 2009-03-29 16:35 myMath2.o-rw-r--r-- 1 eli eli 197 2009-03-29 16:13 myMath.c-rw-r--r-- 1 eli eli 129 2009-03-29 16:14 myMath.h-rw-r--r-- 1 eli eli 878 2009-03-29 16:35 myMath.o-rwxr-xr-x 1 eli eli 557539 2009-03-29 16:42 statically_linkedstatically_linked

Page 11: Shared Libraries

הקדמהיצירת ספרייה משותפת

שימוש בספרייה משותפתהטמעה

- תרגול 1 תכנות מתקדם 89-2104

הטמעהבצעו מחדש את התהליכים שהוצגו בתרגול•

לincludeבאילו מהתוכניות אין צורך ב •“myMath.h” ו “myMath2.h”

רגילa.outהשוו את הגודל ל •

++cבצעו את אותה התוכנית ב •

windowsמצאו את ההתאמות הנדרשות ל •