עזרה בסי: main.c:(.text+0x7f): undefined reference to `deploySubs' - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה בסי: main.c:(.text+0x7f): undefined reference to `deploySubs'


Gilladriel

Recommended Posts

הבעיה היא לא של הקומפיילר, אלא של הלינקר (linker).

אני מניח שהפונקציה המדוברת יושבת בקובץ c נפרד מה-main. הקומפיילר מקמפל כל אחד מהקבצים הללו לקובץ o (או obj) ולאחר מכן הלינקר מקשר בין הקבצים ויוצר קובץ exe אחד. הבעיה היא שהלינקר כנראה לא יודע לקשר בין שני הקבצים המקומפלים (כלומר הוא מקבל כקלט רק את קובץ ה-main), ולכן הוא צועק שהוא לא מוצא את המימוש של הפונקציה deploySubs.

מה מבנה הפרוייקט שלך? באיזו סביבה אתה עובד ואיך אתה מקמפל?

קישור לתוכן
שתף באתרים אחרים

אני משער שאתה צודק, כי קובץ הMakeFile יוצר לי קבצי Object ונכשל ביצירת קובץ ההרצה.

התכנית נכתבה בVS, עובדת תקין בVS תחת כמובן.

עכשיו אני מעביר אותה לסביבת (מריץ עם Vbox) ואתה צודק הכל מתקמפל ונכשל בלינקר. (אפילו בDev++ הוא אומר שגיאת לינקר).

קימפלתי קובץ קובץ ע"י פתיחת shell והרצת השרה gcc -c *.c

או לחלופין ע"י makefile ופקודת make.

חוץ מקובץ main יש עוד שני קבצי source ועוד שני headers, בהתאמה.

אילו עוד נתונים אתה צריך?

קישור לתוכן
שתף באתרים אחרים

הארגומנט c- אומר רק לקמפל, בלי ללנקג'.

אחרי שאתה מקמפל ככה אתה צריך שוב להריץ קומפילציה עם קבצי ה-o שיצאו לך, יענו ככה:

gcc -o myprog *.o

הארגומנט o- אומר מה יהיה שם קובץ הרצה של התכנית (במקרה הזה myprog).

קישור לתוכן
שתף באתרים אחרים

הנה קובץ הmakeFile [מצורף].

רק חידוד ברשותכם - גם כשניסיתי לעשות קישור ידני ע"י שורת הפקודה:

gcc *.o *.o *.o -o Prog

זה לא עבד, יש כאן משהו שאני לא תופס..

[attachment deleted by admin]

קישור לתוכן
שתף באתרים אחרים

אין שום סיבה לעשות שלוש פעמים o.*

אצלך ה-makefile יושב כולו בשורה אחת, או שזה רק משהו שנדפק בהעלאה של הקובץ לאתר? כי חוץ מהירידות שורה (והזחות) הוא נראה תקין.

איפה מוגדר deploySubs ואיפה הוא ממומש?

קישור לתוכן
שתף באתרים אחרים

ב-board.h ו-board.c הצהרת ומימשת שתי פונקציות בשם deploySubs1 ו-deploySubs2, אבל ב-main אתה משתמש בפונקציה בשם deploySubs (הקומפיילר היה אמור לתת לך אזהרה על זה שהשתמשת בפונקציה שלא הוגדרה בכל, כי אמנם זה תקני לפי תקן C90, אבל זה לא נהוג והחל מ-C99 זה כבר לא תקני).

מומלץ, אגב, להוסיף לשורות הקומפילציה את הדגל Wall- שאומר לו להציג לך את כל האזהרות.

קישור לתוכן
שתף באתרים אחרים

אמת.

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

יש לי עוד שאלה בבקשה:

הגעתי לשלב בתכנית שהכל תקין בwindows, התכנית מבצעת את המוטל עליה.

בלינוקס הכל עובר קימפול + לינקור אך קובץ הפלט יוצא ריק.

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

האם קיימת סביבת נוחה כדוגמת VS שאוכל להפעיל על הלינוקס?

אני פשוט חייב לדבג בצורה נוחה (ולא בטקסט אדיטור של הלינוקס!) עם break points וסטפ ביי סטפ.

תודה

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...