DLL hell

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

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

הסיבוך יכול לבוא לידי ביטוי בהודעות שמופיעות כאשר מנסים להפעיל תוכנה במחשב. לדוגמה: "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.[1]

גרסאות לא תואמות[עריכת קוד מקור | עריכה]

גרסה מסוימת של ספריית קישור-דינמי יכולה להיות תואמת לתוכנית אחת ולא תואמת לתוכנית אחרת. מערכות ההפעלה חלונות פגיעות במיוחד לאי תאימות גרסאות בגלל הדגש על קישור דינמי בשפת 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)

קישורים חיצוניים[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]