انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: theMaster در 13 امرداد 1391، 02:14 بظ
-
با سلام
مفاهیم مختصری در مورد وابستگی یا همون dependency رو می دونم ولی دقیق نمیدونم این یعنی چی؟چطور به وجود میاد.
مثلا وقتی ما یه برنامه نوشتیم که از یک سری کتابخانه استفاده کرده. ما اون رو درون برنامه اینکلود کردیم و برنامه رو کامپایل کردیم. مگه اون سورسهای کتابخانه هم به زبان ماشین تبدیل نمیشن؟ پس چرا باز نیاز هست اون کتابخانه ها تو سیستم نصب و وجود داشته باشن؟
-
هنگام کامپایل میتوانید آن کتابخانه را به برنامه پیوست کنید (static )
یا از کتابخانه های پویا بهره برید ( dynamic )
در روش نخست برنامه خود بسنده خواهد بود لاکن حجم بالاتر میرود و ..
در روش دوم حجم پایینتر است لاکن وابسته به کتابخانه های سامانه اصلی است و ..
-
بامثلا وقتی ما یه برنامه نوشتیم که از یک سری کتابخانه استفاده کرده. ما اون رو درون برنامه اینکلود کردیم و برنامه رو کامپایل کردیم. مگه اون سورسهای کتابخانه هم به زبان ماشین تبدیل نمیشن؟ پس چرا باز نیاز هست اون کتابخانه ها تو سیستم نصب و وجود داشته باشن؟
به دو صورت میشه برنامهها رو با کتابخانهها لینک کرد. بصورت Static که در این حالت اون کتابخانهها هم در برنامه قرار میگیرند و به صورت Dynamic که کتابخانه خارج از برنامه قرار میگیره.
حالا چرا همه برنامهها به صورت Static لینک نمیشن؟ چند دلیل داره.
۱) حجم اونها خیلی بالا میره.
۲) مصرف حافظه اونها معمولا بیشتر میشه.
۳) با هر تغییری توی اون کتابخانهها باید برنامه شما هم از نو کامپایل بشه.
برای مثال فرض کنید که همه برنامههای سیستم شما Static لینک شده باشند، با یک تغییر کوچک توی glibc باید تقریبا همه برنامهها دوباره بارگیری (یا لینک) بشن.
-
برای مثال فرض کنید که همه برنامههای سیستم شما Static لینک شده باشند، با یک تغییر کوچک توی glibc باید تقریبا همه برنامهها دوباره بارگیری (یا لینک) بشن.
چون من برنامه ام رو استاتیک کامپایل کردم دیگر وابستگی به glibc ورژن جدید نخواهد داشت. درسته؟ در صورتی که نرم افزار من با نسخه های جدید glibc کار کنه مجبورم دوباره کامپیال کنم درسته؟
-
چون من برنامه ام رو استاتیک کامپایل کردم دیگر وابستگی به glibc ورژن جدید نخواهد داشت. درسته؟ در صورتی که نرم افزار من با نسخه های جدید glibc کار کنه مجبورم دوباره کامپیال کنم درسته؟
ربطی به ورژن جدید یا قدیم نداره، دیگه نیاز به اون کتابخانه نخواهید داشت، چه قدیمی، چه جدید. بله، باید دوباره کامپایل بشه.