יצירת dllים בעזרת autotools תחת cygwin.

ב־22.10.2008, מאת ארתיום; פורסם תחת: תכנה חופשית, לינוקס, פיתוח, תכנה ומחשבים, C++‎‏; ‏0 תגובות

כידוע, dllים הם ייצורים פגומים שהשימוש בהם הוא סיוט. זה חמור עד כדי כך, שבד"כ, מפתחים רבים משתדלים להמנע ממנו.

הדרך הסטנדרטית, בה רוב חבילות cygwin מתמודדות עם הבעיה: יצירה של ספריות סטטיות בלבד. זה נוח, במקרים מסוימים כי זה מאוד מפשט את העבודה, אבל זה מנפח את קבצי ה־exe בצורה משמעותית. מה שעוד יותר חשוב, מחייב אותך לעשות link עם הספריה והתלויות שלה.

כך למשל, עם ספריה libabc תלויה ב־libxyz1 ו־libcoco2. אז כדי לבנות תכנה שמשתמשת ב־libabc במקום לקמפל:

g++ code.o -o prog -labc 

חייבים לקמפל:

g++ code.o -o prog -labc -lxyz1 -lcoco2 

זה הופך את הקמפול לפעולה מאוד לא טריוויאלית, במיוחד כשיש הרבה תלויות. לחילופין, ניתן להשתמש ב־libtool שיודע לאתר קבצי עזר עם התלויות -- libabc.la. במקרה כזה הבניה הופכת ל:‏

libtool --mode=link g++ code.o -labc -o prog

שזה מנפח את כלי הבניה וגם מחייב אותך להשתמש תמיד ב־libtool.

מסתבר, שעם הקפדה על כלל מאוד פשוט בכתיבה של תסריטי automake, ניתן לבנות ספרות דינאמיות בצורה מסודרת ו"כמעט" שקופה למשתמש.

לדוגמה:

lib_LTLIBRARIES = libabc.la
libabc_la_SOURCES = source1.c source2.c

ה־makefile הזה, יאפשר לבנות ספריות libtool סטטיות בלבד, קרי יווצרו ספרות ‎/usr/lib/libabc.la ו־‎/usr/lib/libabc.a שהם קובץ טקסט המכיל מידע על הספריה "la." והספריה עצמה "a.".

אבל, עם מוסיפים שורה:

libabc_la_LDFLAGS  = -no-undefined

שאומרת ל־linker לבנות ספריה ללא "סימבולים לא פתורים" --- הדרישה של כל dll,‏ libtool יבנה עבורינו עוד שתי ספריות נוספות: ‎/usr/lib/libabc.dll.a ספריית "ייבוא" של ה־dll וספריה ‎/bin/cygabc-0.dll הספריה הדינאמית שמעניינת אותנו.

יש לזה מספר דרישות חשובות:

  1. אם libabc תלויה ב־libxyz אז גם libxyz חייבת להיות מקומפלת כמו dll.‏
  2. אם אתם מקמפלים ספריה מחדש ומתקינים אותה, וודאו כי כל התכנות המשתמשות בה תהיינה סגורות. ב־windows, בניגוד ל־unixים, לא ניתן למחוק dll בשימוש.

עכשיו שאלת מיליון דולר: "האם cmake יודע לעשות דברים כאלה?"

הוסף תגובה:

 
 כתובת דוא"ל לא תוצג
 

ניתן לכתוב תגובות עם שימוש בתחביר Markdown.

חובה לאפשר JavaScript כדי להגיב.

דפים

נושאים