כמה דברים:
א) הבעיה שלך היא שגיאת זמן ריצה.
זה משהו ששום קומפיילר לא יוכל לתפוס, משום שהשגיאה קשורה בסביבה שבה התוכנה עובדת.
אם הייתי צריך לנחש, הבעיה שלך היא שמיקום הקבצים או השמות שלהם מעט שונים במערכת האחרת (Linux ו-Unix רגישות לגודל אות בשמות קבצים, בעוד ש-Windows לא).
כנראה, שכחת לבדוק אם הקובץ נפתח בהצלחה לפני שאתה מנסה לקרוא ממנו, וזה מה שגורם לשגיאה.
ב) Unix ו-Linux הם דברים שונים (למרות שיש דמיון מסוים בניהם).
בכל מקרה, אתה לא יכול לפתח קוד למערכת הפעלה בלי לדעת איך עובדים באותה מערכת הפעלה.
לכל הפחות, אם אתה רוצה לכתוב קוד שעובד גם ב-Windows וגם ב-Linux אתה צריך לדעת ממה להימנע, ולהשתמש רק ברכיבים הסטנדרטיים של שפת C או ספריות חוצות פלטפורמה.
בקיצור, אין כאן פתרון קסם, וכמו שאמרתי, לא משנה אם תבנה את הקוד של עם VS או עם TCC או עם Sygwin.
הדבר הראשון שיש לעשות כדי לבדוק את מקור הבעיה הוא לוודא שבכל פעם שאתה מפעיל פונקציה שעלולה להיכשל, אתה בודק אם היא אכן הצליחה ולפועל בהתאם.
למשל, בדוק ש-fopen (אם אתה משתמש בה) לא החזירה NULL.
כנ"ל לגבי malloc.
מעבר לזה, עליך ללמוד להשתמש ב-debugger על Linux או Unix (תלוי עבור מה אתה חייב לבנות את התוכנה).
בהצלחה!