لینوکس و شبکه

لینوکس و شبکه
طبقه بندی موضوعی
آخرین مطالب
  • ۹۹/۱۱/۱۳
    java

management shared library

شنبه, ۲۵ شهریور ۱۳۹۶، ۱۰:۰۳ ب.ظ

زمانی که برنامه ای به اجرا در آورده میشود (مثلا برنامه ی ls), این برنامه برای اجرا به یک سری کتابخانه نیازمند است و باید این کتابخانه ها در داخل ram قرار بگیرد.

ابزارهایی هستند که این کار را انجام می دهند. به عنوان مثال در هنگام اجرای دستور ls ابتدا چک می‌شود که دستور به چه کتابخانه هایی احتیاج دارد و از بین این کتابخانه ها کدامیک در حال حاضر در داخل ram نیست، پس آن را به داخل ram برده و در نتیجه دستور ls به درستی کار خواهد کرد.

این ابزار linker نام دارد.

در یک سیستم عامل تعداد زیادی کتابخانه وجود دارد و linker نمی تواند هر بار برای اجرای هر برنامه, تمامی مسیر های کتابخانه ها را به صورت آنلاین بگردد لذا از دیتابیسی استفاده می کند که در آن , آدرس دقیق هر کتابخانه نوشته شده است . پس زمانی که linker به کتابخانه ای احتیاج داشته باشد ابتدا در دیتابیس خود به دنبال نام آن گشته سپس مسیر آن را از داخل db می خواند و در آخر آن را در داخل ram قرار می‌دهد.
این دیتابیس را می توان در دو فایل زیر دید که اولی یک فایل متنی و دومی یک فایل باینری است

/etc/ld.so.conf
/dtc/ld.so.cache

بصورت پیش فرض در داخل این دیتابیس،بسیاری مسیر و کتابخانه وجود دارد و حتی ممکن است کتابخانه‌ای جدید بصورت دستی به این دیتابیس اضافه بشود. برای این منظور ابتدا مسیر کتابخانه های خود را در فایل متنی

ld.so.conf

اضافه می کنیم سپس با استفاده از دستوری دیگر به نام

ldconfig

ایندکس کتابخانه‌های جدید (موجود در مسیری که اضافه کردیم) را به دیتابیس اضافه می کنیم

/etc/ld.so.cache
ldconfig

توجه داشته باشید که برای اضافه کردن کتابخانه به فایل باینری ls.so.cache نیاز به یوزر root است


Static library
تمام توابع مورد نیاز همواره باید همراه برنامه باشد، حجم برنامه خیلی بزرگ خواهد شد


Dynamic Library
برنامه ها فقط در هنگام نیاز توابع کتابخانه را برای سیستم عامل فراخوانی میکنند و نیاز نیست همه آنها در هر لحظه فراخوانی بشود، اگر نیاز به یک تابع کتابخانه ای که در سیتم عامل نیست پیش آید، در این صورت از اینترنت آن را دانلود خواهد کرد.
توابع در مسیر زیر هستند

/lib
/usr/lib
/lib64