DLL hell

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

הסיבוך יכול לבוא לידי ביטוי בהודעות שמופיעות כאשר מנסים להפעיל תוכנה במחשב. לדוגמה: "A Required DLL File, xxxx, was not found" או "The procedure entry point xxxx couldn't be located in xxxx.DLL". לעיתים לא תופענה הודעות, אבל היישום יפעל באופן לא תקין.

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

 גרסאות לא תואמות 
גרסה מסוימת של ספריית קישור-דינמי יכולה להיות תואמת לתוכנית אחת ולא תואמת לתוכנית אחרת. מערכות ההפעלה חלונות פגיעות במיוחד לאי תאימות גרסאות בגלל הדגש על קישור דינמי בשפת C++ ואובייקטים של OLE. מחלקות בשפת C++ מייצאות שיטות רבות, ולכן שינוי יחיד במחלקה יכול לפגוע בתאימות עם תוכניות שנבנו מול גרסאות מוקדמות יותר. לדוגמה, תיקון "באג" בתוכנה אחת יכול להסיר מאפיין של תוכנה אחרת.

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

ייתכן גם Dependency hell אחר, לדוגמה, בשפת התיכנות Java. הקוד עובר הידור וקישור סטטי, אבל בזמן ריצה דינמית, מתגלה השגיאה:java.lang.IncompatibleClassChangeError: Class com.google.common.base.Functions$IdentityFunction does not implement the requested interface java.util.function.Function
	at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:178)

 קישורים חיצוניים 

 hell אל dll (בGo) – חלק ראשון באתר לראות שונה

 הערות שוליים 

קטגוריה:Windows