ABA


"מתי כדאי להשתמש בקבצי LIB וDLL?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #21610 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 21610
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   20:46   08.03.16   
אל הפורום  
  מתי כדאי להשתמש בקבצי LIB וDLL?  
 
אני מדבר בעיקר בשימוש ב++C, מצאתי הרבה הסברים לא ברורים באינטרנט, אני בעיקר מנסה להבין מתי בתוכנית אני אעדיף להשתמש באחת השיטות הנ"ל.
למשל, אני כותב כרגע תוכנית עם בערך 10 - 15 קבצי CPP, חשבתי שאולי בשביל שלא כל פעם שאני עושה שינוי קטן הוא יקמפל מחדש את כל הקבצים, אני פשוט אייצר ספריות ואשתמש בהם, שהרי אני לא עושה בהם שום שינוי ממילא.
ואם כבר אני עושה ספריות, כדאי להפוך הכל לספרייה גדולה? או כל קובץ (מחלקה) לספרייה אחת?
בכל מקרה אני מקמפל בסוף את הכל ל DLL כי אני מעביר את זה לתוכנית ב#C בשביל הGUI, אז האם זה נכון להשתמש בספריות ואותן לקמפל לDLL?

תודה וסליחה על החפירה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תשובה נעמי 09.03.16 13:26 1
     תודה רבה על ההסבר המפורט asco88  09.03.16 14:02 2
         בעיקרון נעמי 09.03.16 14:32 3
             התוכנית כבדה מאוד ומבצעת חישובים מאוד ארוכים asco88  09.03.16 20:31 4
                 חישובים אפשר לייעל נעמי 09.03.16 23:42 5
                     אני צריך לנתח קבצי טקסט די גדולים asco88  10.03.16 06:24 6
                         לא רוצה להישמע חפרנית אבל נעמי 10.03.16 07:41 7
                             שיחקת אותה עם התשובות המפורטות אורי  10.03.16 07:50 8
                             תודה רבה - משומה אי אפשר לשלוח לך הודעה פרטית.. asco88  10.03.16 17:54 9
                                 היא החליפה כינוי.. אתה יכול לשלוח ל-''הרבנית דוטנט'' אורי  10.03.16 21:44 10
                                     תודה asco88  10.03.16 22:05 11

       
נעמי

   13:26   09.03.16   
אל הפורום  
  1. תשובה  
בתגובה להודעה מספר 0
 
  
יש לך אי הבנה בנוגע למושג "ספריה".
קוד שמים בספריה כשרוצים להשתמש באותו קוד בתוכניות שונות. לדוג': אם כתבתי פונקציה שמחשבת אורך של מחרוזת,נקרא לה Length,ואני רוצה לקרוא לה מכמה תוכניות שונות,נייצא את הקוד של הפונק' לספריה ואז כל תוכנית תוכל להוסיף את הספריה ולהשתמש בפונק' לחחישוב אורך מחרוזת.

יש שתי סוגי ספריות - LIB & DLL.
ההבדל בין DLL ל Lib:
LIB זה ספריה סטטית ו DLL זה ספריה דינאמית.
מה זה אומר?
* ספריה סטטית עובדת בצורה כזו שהקוד המקומפל,בדוג' שלנו Length, מחולץ מהספריה ומוסיף לקוד שלך ואז הכל מתקמפל יחד.
זה אומר שכל שינוי שתעשה בפונק' Length תצטרך לקמפל גם את הקוד של Length,כדי שתיווצר ספריה מעודכנת עם הקוד החדש וגם לקמפל את הקוד שמשתמש ב Length,כי הקוד שנוסף כבר לא מעודכן לקוד החדש.

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

אגב,ב C# לא עובדים עם LIB אלא רק עם DLL.


אם אתה רוצה ש C# יכיר בקוד שכתבת ב C ,אתה צריך לקמפל אותו ל dll. אם בכל זאת אתה רוצה לעבוד עם lib,תוכל ליצור Managed Wrapper.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   14:02   09.03.16   
אל הפורום  
  2. תודה רבה על ההסבר המפורט  
בתגובה להודעה מספר 1
 
ערכתי לאחרונה בתאריך 09.03.16 בשעה 14:05 בברכה, asco88
 
הבנתי את העיקרון, השאלה היא בעיקר, האם זה נכון להשתמש בספריה כשאני משתמש באותו קובץ אבל גם באותה תוכנית?
למשל יש לי קובץ עם מחלקה בשם NDArray שכתבתי אותו פעם אחת, ואני לא משנה אותו אף פעם, אבל כל שינוי שאני עושה בתוך הפרויקט גורר קמפול מחדש גם של הקובץ הנ"ל, הבעיה היא שיש לי המון קבצים כאלה שהם במבחינתי כבר סגורים ולא דורשים שינוי, אבל הם מוסיפים בערך דקה לכל קימפול שמתבצע בפרוייקט, וגם יש לי בלגן אטומי בקבצים שממילא אני לא צריך לעבוד איתם (ממילא יש לי את ההדר שלהם ואני לא זקוק להם בעבודה השוטפת).
לגבי ה#C עשיתי בדיוק ככה עם DLL, וייבאתי את הפונקציות שרציתי בעזרת PInvoke עובד סבבה, אבל דורש קצת עבודה.

אה וברוכה הבאה לפורום

@נעמי@

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
נעמי

   14:32   09.03.16   
אל הפורום  
  3. בעיקרון  
בתגובה להודעה מספר 2
 
  
בעיקרון אין צורך לייצא לספריה במידה ואתה משתמש בקוד הרבה פעמים באותה תוכנית אבל בגלל שאתה רוצה לקצר את זמן הקימפול, אז תייצא את זה לספריה ואז בקומפילציה הוא ידלג על שלב הראשון- שלב בדיקת ה Header files (יכולים להיות אלפים של headers מה שמאריך את זמן הקימפול) ויתחיל מהשלב השני - Linking.

אם היית כותב ב C# - זמן הקימפול היה קצר משמעותית.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   20:31   09.03.16   
אל הפורום  
  4. התוכנית כבדה מאוד ומבצעת חישובים מאוד ארוכים  
בתגובה להודעה מספר 3
 
לכן העדפתי לקחת שפה פחות משוכללת ויותר מהירה, אני זוכר שבJAVA תוכנית כזאת היתה לוקחת פי כמה יותר זמן מC, אני מניח שזה דומה עם #C.
אני באמת אנסה את מה שאת אומרת זה נשמע רעיון טוב


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
נעמי

   23:42   09.03.16   
אל הפורום  
  5. חישובים אפשר לייעל  
בתגובה להודעה מספר 4
 
  
סתם מעניין,למה התוכנית?
ולא בטוח ש c# לא ייתן לך מענה מהיר. יכול להיות שאתה שימוש לא נכון באובייקטים...
כתבתי תוכנית real time ב c# וזה עובד מצוין.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   06:24   10.03.16   
אל הפורום  
  6. אני צריך לנתח קבצי טקסט די גדולים  
בתגובה להודעה מספר 5
 
בלי להיכנס לפרטים, כל קובץ עובר כמה מאות אלפי איטרציות של הכנסה וחיפוש במערך.
ואז את זה אמורים לבצע על כמה מאות קבצים
כל קובץ לוקח לי 2-3 דקות.
וזה עוד לפני כל ההשוואות בין קבצים שאמורות לקחת לא מעט.

חוץ מזה, שכבר הרבה מאוד כתוב והאמת שאין לי כח לכתוב את כל זה מחדש בייחוד שאני לא חזק ב#C


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
נעמי

   07:41   10.03.16   
אל הפורום  
  7. לא רוצה להישמע חפרנית אבל  
בתגובה להודעה מספר 6
 
  
לא רוצה להישמע חפרנית אבל אם יש לך מאות אלפי איטרציות של הכנסה וחיפוש במערך - כדאי לך להשתמש במבנה נתונים מתאים יותר כמו dictionary או hash table שזמן החיפוש הוא (1)O.

השוואות בין קבצים - יש תוכנות שעושות השוואות בינאריות.

יכול להיות שאתה יכול לייעל את התוכנית - אם תרצה לדבר על זה,תרשום לי בפרטי..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
אורי 
חבר מתאריך 9.7.12
20459 הודעות
   07:50   10.03.16   
אל הפורום  
  8. שיחקת אותה עם התשובות המפורטות  
בתגובה להודעה מספר 7
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   17:54   10.03.16   
אל הפורום  
  9. תודה רבה - משומה אי אפשר לשלוח לך הודעה פרטית..  
בתגובה להודעה מספר 7
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
אורי 
חבר מתאריך 9.7.12
20459 הודעות
   21:44   10.03.16   
אל הפורום  
  10. היא החליפה כינוי.. אתה יכול לשלוח ל-''הרבנית דוטנט''  
בתגובה להודעה מספר 9
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   22:05   10.03.16   
אל הפורום  
  11. תודה  
בתגובה להודעה מספר 10
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net