בעיות תלויות ב c++

בד"כ כשמתקינים תונכה כתובה ב visual c++ על מחשב נקי אנחנו צריכים להתקין בנפרד מספר תלויות.
הקבצים שיחסרו לנו הם למשל msvcp80.dll.
לכאורה זה נראה שאם מתקינים visual studio redistributable נקבל את כל התלויות הרצויות, אבל לא כך הדבר מכיוון שיש כמה גרסאות וצריך לדעת בדיוק מה חסר.
הטעות הנפוצה היא להשתמש ב dependency walker שבעצם כל כך מיושן שמשום מה נותן תוצאות שגויות.
הפתרון האמיתי הוא להעזר ב application event log או בכלי שנקרא sxstrace. הכלי הזה מופעל ברקע ועוקב אחרי הפעלת התוכנה שלנו. אחר כך ניתן להדפיס מידע מפורט על התלויות ועל האופן שבו מנסה התוכנה לחפש את הקבצים האלה.

לאחרונה נתקלתי בבעיה חמורה אחרת. אני מנסה לקמפל פרוייקט ב release ולשים אותו במחשב היעד הנקי.
משום מה התלויות של התוכנה (שהיא managed c++) אומרות שחסרים קבצים dll לגרסת ה debug.
ניסיתי לפתוח את התוכנה (exe) בצורה ידנית עם notepad++ ולנסות לשנות את ה manifest. אך לאחר השמירה התוכנה סירבה לפועל.
קימפלתי מחדש את הפרוייקט אבל הפעם קבעתי ב manifest tool כך שה manifest יהיה בנפרד מהתוכנה.
שיניתי את הmanifest בצורדה ידנית וזה עובד :)

לסיכום:
אני מקווה שבמיקרוסופט ימצאו פתרון לבעיות הבאות:
  • איך מקמפלים ב release בלי תלויות בקבצי debug (האמת שעכשיו ב release אני מסוגל אפילו לדבג... מדהים).
  • איך מתקינים תוכנה על מחשב היעד בתצורת debug מבלי להעתיק ידנית את קבצי ה winsxs (שגם זה לא ממש בר ביצוע במחשבי windows server 2008 למשל).

Post a Comment

Previous Post Next Post