====שימוש בסיסי ב gcc==== ===מטרת המדריך=== מטרת מדריך זה להשלים את הפער בין החומר התאורטי הנלמד בכתה או מספר לימוד, לבין העבודה המעשית על המערכת. ===למי מיועד המדריך=== המדריך מיועד לתלמידים המתחילים את הלימוד התאורטי של שפת C, וזקוקים להדרכה כיצד לכתוב ולהדר את התכניות הראשונות שלהם במערכת GNU/Linux. ===על איזו מערכת נבנה המדריך=== המדריך נבנה על מערכת Ubuntu GNU/Linux אך כל מערכת לינוקס תתאים. הוראות ההתקנה המדוייקות ספציפיות למערכת מבוססת Debian GNU/Linux, אך ינתנו הסברים כלליים גם עבור מערכות אחרות. ===לפני תחילת העבודה=== עברו על המדריך לכתיבת תכנית בשפת C ובדקו שאתם שולטים בכתיבה, הידור והרצה של תכניות C פשוטות: * [[כתיבת תכנית ב C]] ===תהליך ההידור והקישור=== תהליך הכנת תכנית בנוי בד"כ ממעגל: עריכה - הידור - קישור - דיבוג במדריך זה נדון בשלבי ההידור והקישור. לאחר עריכת קבצי הקוד ע"י עורך טקסט, הקבצים צריכים לעבור שני שלבים עיקריים אלו לפני שניתן להריץ את התוצאה הסופית. שלב ראשון, הוא שלב ההידור. בשלב זה מהודרים קבצי הקוד (בד"כ בעלי סיומת המזהה את שפת הקוד) לקבצי אוביקט. קבצי האוביקט מכילים הוראות המתאימות למערכת שלנו המבצעות את הפעולות אותן הגדרנו בקוד. בד"כ שם קובץ האוביקט זהה לשם קובץ הקוד עם סיומת o . לדוגמה, הקובץ main.c יהודר לקובץ main.o . קבצי האוביקט אינם ניתנים להרצה, הם מכילים שמות וסמלים של משתנים ופונקציות במקומות בהם צריכות להופיע כתובות מדוייקות עבור המעבד. השלב השני, הוא שלב הקישור. בשלב זה מקושרים הסמלים והשמות לכתובות מדוייקות בהן יוכל המעבד למצוא את המשתנים והפונקציות בזמן הריצה. שלב הקישור מקשר אל פונקציות שונות של הפרוקיט שלנו הכתובות בקבצי קוד שונים, וגם אל פונקציות המוגדרות בספריות המערכת, כמו לדוגמה malloc או printf ===gcc=== GCC הוא גם מהדר וגם מקשר. ניתן להשתמש בוא לביצוע כל אחד מהשלבים לבד, או לביצוע כל השלבים בקריאה אחת. עבור פרוקיטים קטנים יהיה יותר קל לקרוא ל GCC בפקודה אחת שתבצע הידור של כל קבצי הקוד ומייד גם קישור שלהם לקובץ הרצה, לדוגמה: gcc -g -Wall writeln.c main.c -o main ([[#כתיבת התכנית|ראה את הקוד השייך לקבצים אלו בהמשך המדריך]]) ([[#תמונת מסך|ראה תמונת מסך בסוף המדריך]]) בפרויקטים גדולים יותר נרצה לבצע כל שלב בנפרד, לדוגמה: שלב ראשון, הידור בלבד - הידור של כל אחד מקבצי הקוד בנפרד לקובץ אוביקט, בעל סיומת o gcc -g -Wall -c main.c gcc -g -Wall -c writeln.c שלב שני, קישור בלבד - קישור של הפונקציה writeln המוגדרת בקובץ הקוד writeln.c לתוך קובץ ההרצה המשותף עם הפנקציה main מהקובץ main.c באופן סמוי מתבצע כאן גם קישור של הפנקציה printf השייכת לספרה הסטנדרטית לתוך הפונקציה writeln gcc writeln.o main.o -o main ([[#כתיבת התכנית|ראה את הקוד השייך לקבצים אלו בהמשך המדריך]]) ([[#תמונת מסך|ראה תמונת מסך בסוף המדריך]]) ==דגלים לשימוש ב gcc== למרות בררות המחדל הנוחות של מהדר gcc הרבה פעמים נרצה לכוון בצורה עדינה יותר את מהלך פעולתו, בהמשך מפורטים מעט מהדגלים בעזרתם ניתן לכוון את פעולת המהדר. השתמש בפקודה man ובמדריכים ברשת כדי ללמוד יותר על האפשרויות השונות של המהדר. man gcc צורת ההפעלה של gcc נראת כך: /*code*/ /* file name: writeln.h */ #ifndef __WRITELN_H__ #define __WRITELN_H__ void writeln (const char * string); #endif /* __WRITELN_H__ */ /*code*/ * קובץ ב. writeln.c קובץ הקוד של פונקצית העזר בה נשתמש בפרויקט שלנו /*code*/ /* file name: writeln.c */ #include #include "writeln.h" void writeln (const char * string) { printf ("%s\n", string); } /*code*/ * קובץ ג. main.c קובץ הקוד של הפונקציה הראשית בפרוייקט שלנו /*code*/ /* file name: main.c */ #include "writeln.h" int main (int argc, char * argv []) { writeln ("Hello world"); return 0; } /*code*/ ==הידור התכנית== אנו נהדר את התכנית בעזרת מהדר gcc, מתוך המסוף ([[#תמונת מסך|ראה תמונת מסך בסוף המדריך]]) הידור וקישור בשורה אחת (מתאים לפרויקטים קטנים) gcc -g -Wall writeln.c main.c -o main הידור של כל קבץ מקור בנפרד, וקישור מאוחר יותר של כל קבצי הפרויקט יחדיו. gcc -g -Wall -c main.c gcc -g -Wall -c writeln.c gcc writeln.o main.o -o main ==הרצת התכנית== קוד: main/. ==תמונת מסך== כך צריכה להראות התכנית בעורך הטקסט ובמסוף בו אתם מבצעים את ההידור וההרצה. {{מדריכים:c_prog_multi.jpg?200x200}} (לחץ על התמונה כדי לקבל תמונה מוגדלת) ===איך להמשיך=== בהמשך העבודה בודאי תרצו להתקין כלי פיתוח נוספים וספריות פיתוח חדשות. אפשר למצוא מדריכים לשימוש בכלים אלו ברשת ופה באתר. === מדריכי תכנות === [[מדריכי תכנות]] - אוסף מדריכי התכנות בפנגווין.