שאלה כללית לגבי CPP

ahillel

New member
שאלה כללית לגבי CPP

האם תוכנית שנכתבה בCPP תדרוש פריימוורק אם נעשתה בויזואל סטודיו (בדומה לC#)?
 

somebodddy

New member
בעיקרון לא

אם היא נכתבה בVS2008(ואולי בעוד גירסאות) היא תדרוש את הRuntime Libraries, אבל זה קובץ קטן יחסית(1.7 מגה לגירסת הx86, 2.3 מגה לגירסת הx64) ואפשר בקלות לשלב אותו בתוכנת ההתקנה. הבנתי שיש גם דרך לעשות שלא יצטרכו את זה, אבל אני אישית לא הצלחתי, וגם קראתי באינטרנט שזה לא כזה מומלץ... בכל אופן, הנה הRuntime Libraries: x86: http://www.microsoft.com/downloads/...34-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en x64: http://www.microsoft.com/downloads/...71-E2D6-4230-B809-9A8D7548C1B6&displaylang=en אאל"ט הגירסה(x86/x64) תלויה בפלטפורמה אליה פותח המשחק, ולא בסוג המעבד או סוג מערכת ההפעלה.
 

eranegrin

New member
מה יש לאנשים נגד FrameWork?

אני לא מבין מה כל כך נורא? השנאה למיקרוספט כל כך עזה? זה מזכיר לי את השנאה שיש לישראל היום בעולם. אני עובד על C# VS 2008 ונהנה מכל רגע.
 

ahillel

New member
נסה לשווק ללקוחות תוכנה שנכתבה בNET

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

somebodddy

New member
מה עניין שמיטה להר סיני?

זה לא קשור לשנאה למייקרוסופט. זה קשור לזה שהרבה פעמים למשתמש הממוצע אין את הפריימוורק, ויש אנשים שלא יורידו קובץ כזה גדול בשביל לשחק במשחק קטן. זה נכון גם למכונה הווירטואלית של ג'אווה. ויש גם את עניין הגירסאות. אם אתה מפתח לפריימוורק אתה צריך לפתח כמה גירסאות אחורה, כי לוקח זמן עד שגירסה חדשה תופסת, והמשתמש הממוצע לא ינסה להוריד גירסה חדשה של הפריימוורק(או המכונה הווירטואלית) כשהוא יראה שהתוכנה שלך לא עובדת - בדרך כלל הוא פשוט יוותר.
 

ahillel

New member
הבעיה איתם

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

adiel666

New member
דעתי האישית בענין + פתרון לSomeboddy

לSomeboddy: תשנה במאפייני הפרוייקט את MD לMT, זה יכליל את הDLL סטאטית, ובמילים אחרות יוסיף לגודל של הקובץ אבל ירוץ על כל מחשב עם windows 98 ומעלה. Project->Properties->C/C++->Code Generation לענין השרשור: אני עובד המון עם VS, בין אם C++ ובין אם C#. בקשר לכל הדיעות הקדומות על הFrameWork...כמעט על כל מחשב בימינו מותקן 1.1 ומעלה - אז נו, באמת. אני זוכר שהיה פעם משחק שהיה דיי להיט בארץ, בשם MuOnline והוא הצריך התקנה של FrameWork 1.1, ככה שה-FrameWork זה לא מה שעצר אותו. עברתי השבוע על קוד בן 3-4 אלף שורות של מבני נתונים שעושים שימוש בWinsock.h עם VC++ ואני יכול להגיד לך ש- System.Net ו- System.Net.Sockets נוחים בהרבה, ואני רואה שאת אותה הפרוצדורה שנעשתה שם בC++ עם Winsock.h אני יכול ליצור בC# עם System.Net בשליש מהשורות, ובצורה מסודרת מאוד. התמיכה של MSDN בFrameWork היא אדירה, שלא לדבר על זה שאפילו בעת התכנות עצמו יש לך תקציר על כל איבר שיש לספק לפונקציה שמוכללת בFrameWork על ידי הקומפיילר עצמו וכמו כן גם על כל Datatype. לבא ולהגיד שה- FrameWork של Microsoft זה דבר "נחות" שיש להמנע ממנו, רק בגלל שהוא Dependency - ממש עושה רושם של חוסר בידע מספק לשם קביעה של דבר שכזה. מיקרוסופט הבינה את השגיאה שלה, ובגלל זה כל מערכת שתבוא אחרי Vista וכולל את Vista עצמה- באה אוטומטית עם FrameWork מובנה. לצערי XP עם Sp3 אפילו, לא תגיע עם FrameWork, זה עדין אופציונלי בXP. אם ההודעה שלי נראת כאילו אני מעריץ נלהב של מיקרוסופט- אז ההפך הוא הנכון, מה שכן אני ריאליסטי לגבי הענין וזאת המציאות.
 

somebodddy

New member
אתה חושב שלא ניסיתי? זה לא מתקמפל

עושה לי:
msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj) msvcrt.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::eek:perator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj) msvcrt.lib(MSVCR90.dll) : error LNK2005: _isspace already defined in LIBCMT.lib(_ctype.obj) msvcrt.lib(MSVCR90.dll) : error LNK2005: ___iob_func already defined in LIBCMT.lib(_file.obj) msvcrt.lib(MSVCR90.dll) : error LNK2005: _fclose already defined in LIBCMT.lib(fclose.obj) msvcrt.lib(MSVCR90.dll) : error LNK2005: _exit already defined in LIBCMT.lib(crt0dat.obj) msvcrt.lib(MSVCR90.dll) : error LNK2005: _strrchr already defined in LIBCMT.lib(strrchr.obj) LIBCMT.lib(crt0init.obj) : warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library D:\CPP\SDLBasedEngine\SBEDevelop\Release\SBEDevelop.exe : fatal error LNK1169: one or more multiply defined symbols found​
 

adiel666

New member
הספריה LIBCMT בעצם מתנגשת בMSVCR90.dll

בעיקרון כשאתה משנה לMT, זה מכליל בשבילך את הLIB (קישור סטאטי) ומהדר איתו. תבדוק ב: Linker->Input אם יש לך שם את LIBCMT.lib, אם כן, תסיר אותו. תבדוק לאחר מכן ב: Linker->Command line שהספריה הזו לא מופיעה גם שם, ותהדר. עדין לא עובד? לך לLinker->Input->Ignore specific library ותרשום את LIBCMT.lib. ובקשר להתנגשות של msvcrt.lib, כמו שרשום לך, תנסה אולי לבחור בlinker->input->Ignore all default libraries את האופציה /NODEFAULTLIB תגיד לי אם הצלחת.
 

somebodddy

New member
לא מצליח

לא מוצא את LIBCMT ברשימה. גם הכנסתי אותו לIgnore specific libraries וזה גם לא עבד. בקשר לmsvcrt.lib, כשאני מפעיל NODEFAULTLIB זה מבטל המון ספריות חשובות, אבל נראה לי שלהכניס אותו לIgnore specific libraries עובד. בכל אופן נראה לי שלשלב את הRuntime בהתקנה זה פתרון יותר טוב...
 

adiel666

New member
מוזר מאוד

אני, בתור מישהו שבונה תוספים לMMF2 בC++, חייב לייצר את התוסף ללא שום תלות בDLL כלשהו מהרבה סיבות- ואני תמיד מהדר את התוסף עם האופציה של MT וזה עובד לשאר המשתמשים מעולה...מגדיל את הקובץ ב50KB בערך אבל לא קריטי. מעבר לזה, שמתי לב שאתה מדבר הרבה על עבודה עם Java, שלפי דעתי בעלת הרבה יתרונות. יש גם מנוע תלת מימד לJava אגב שנתקלתי בו פעם, אני חושב שקראו לו JMonkey אבל אז הוא היה רק בהתחלת דרכו, מענין אם הוא התפתח מאז או נכשל. דוגמא טובה למשחק שנבנה בJava היא Runescape, היישום שלך יכול לעבוד כJava Web Application שלפי דעתי נותן לה יתרון ממשי על שאר השפות בימינו. הטרנד הנוכחי בעולם ההייטק הוא יישומים משולבים באתרי אינטרנט ככה שהעתיד של Java מובטח :) העיצה שלי-תמשיך עם Java, זה מה שאני הייתי עושה אלמלא הייתי צריך ללמוד לתעודה של מיקרוסופט.
 
למעלה