שימוש בסיסי ב gcc

מטרת המדריך

מטרת מדריך זה להשלים את הפער בין החומר התאורטי הנלמד בכתה או מספר לימוד, לבין העבודה המעשית על המערכת.

למי מיועד המדריך

המדריך מיועד לתלמידים המתחילים את הלימוד התאורטי של שפת C, וזקוקים להדרכה כיצד לכתוב ולהדר את התכניות הראשונות שלהם במערכת GNU/Linux.

על איזו מערכת נבנה המדריך

המדריך נבנה על מערכת Ubuntu GNU/Linux אך כל מערכת לינוקס תתאים. הוראות ההתקנה המדוייקות ספציפיות למערכת מבוססת Debian GNU/Linux, אך ינתנו הסברים כלליים גם עבור מערכות אחרות.

לפני תחילת העבודה

עברו על המדריך לכתיבת תכנית בשפת 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 נראת כך:

  <gcc <options> <files

בדוגמה הקודמת “g -Wall -o main-” הם האפשרויות (options) ואילו “writeln.c main.c” הם הקבצים (files).

  • פרוט דגלים חשובים:
  c files-

הוראה זו מנחה את gcc להדר את הקובץ בלבד ולא לבצע קישור בסוף תהליך ההידור.

  o file-

הוראה זו מנחה את gcc לכתוב את קובץ הפלט תחת שם מסוים

  g-

הוראה זו מנחה את gcc להכניס הוראות דיבוג לתוך קובץ האובייקט, קובץ שהודר עם פקודה זו מכיל מידע שיקל מאוד על תהליך הדיבוג בשלב הבא של פיתוח הפרויקט.

  Wall-

הוראה זו מנחה את gcc להיות קפדן בבדיקת הקוד ולהתרע על כל נקודה בקוד שעלולה להיות שגויה

  Idir-

הוראה זו מנחה את gcc באלו ספריות הוא צריך לחפש קבצי include

  Ldir-

הוראה זו מנחה את gcc באלו ספריות הוא צריך לחפש קבצי ספריות מערכת

  lmylib-

הוראה זו מנחה את gcc ביחד עם אלו ספריות מערכת צריך להדר את הפקרויקט שלנו. לדוגמה, הדגל lm- יגיד ל gcc לקשר את הפרויקט שלנו עם פונקציות מתוך הספריה המתמטית ששמה m

מהלך העבודה

כתיבת התכנית

את התכנית ניתן לכתוב בכל עורך טקסט. אנו נשתמש בדוגמה זו בעורך הטקסט של Gnome.

כתוב פרויקט פשוט הבנוי משני קבצי קוד וקובץ הגדרות אחד בעורך הטקסט,

  • קובץ א. writeln.h קובץ הגדרות
/*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 <stdio.h>

#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

(לחץ על התמונה כדי לקבל תמונה מוגדלת)

איך להמשיך

בהמשך העבודה בודאי תרצו להתקין כלי פיתוח נוספים וספריות פיתוח חדשות. אפשר למצוא מדריכים לשימוש בכלים אלו ברשת ופה באתר.

מדריכי תכנות

מדריכי תכנות - אוסף מדריכי התכנות בפנגווין.

מדריכים/שימוש_בסיסי_ב_gcc.txt · שונה לאחרונה ב: 2008/06/19 18:34 (עריכה חיצונית)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0