پیونددهنده پویا

در نظریه محاسبات، پیوند دهنده پویا (به انگلیسی: Dynamic Linker) بخشی از سیستم‌عامل است که وظیفه بارگذاری منابع و کتابخانه‌های مورد نیاز برنامه اجرایی و پیوند دادن آن‌ها را به برنامه در زمان اجرا بر عهده دارد.
پیوند دادن معمولا به فرایندی اطلاق می‌شود که در آن منابع مورد نیاز یک برنامه قبل از اجرا، در زمان کامپایل و توسط کامپایلر به آن برنامه متصل می‌شوند تا یک بسته اجرایی (به انگلیسی: Executable) کامل ایجاد شود. در مقابل پیوند دهنده پویا منابع مورد نیاز را در زمان اجرای برنامه در آن بارگذاری کرده و سپس آن‌ها را به برنامه در حال اجرا مقید (به انگلیسی: Bind) می‌کند.
پیونده دهنده پویا عملیات بارگذاری و پیوند منابع و کتابخوانه‌ها را در زمان اجرای برنامه بر عهده دارد. به این صورت که کتابخوانه‌های اشتراکی (به انگلیسی: Shared Libraries) و منابع مورد نیاز برنامه را در زمان اجرا و در صورتی که در حافظه اصلی موجود نباشند، از حافظه پایدار (به انگلیسی: Persistent Storage) به حافظه اصلی منتقل کرده، سپس جدول‌های پرش (به انگلیسی: Jump Table) برنامه بارگذاری شده را با آدرس‌های منابع اشتراکی تکمیل و اشاره‌گر‌های (به انگلیسی: Pointer) با آدرس مطلق برنامه را آدرس دهی می‌کند.
پیاده‌سازی پیوند دهنده پویا و بارگذار پویا و توانایی‌ها و کاربردهای آن‌ها بسته به نوع و رده سیستم‌عامل و نوع فایل‌های اجرایی و منابع مورد نیاز آن‌ها ممکن است متفاوت باشد.
پیاده‌سازی‌ها
سیستم‌های عامل ویندوز
کتابخانه پیوندی پویا (به انگلیسی Dynamic-link library) یا DLL نام پیاده‌سازی شرکت مایکروسافت از مفهوم کتابخانه اشتراکی است.
این پیاده‌سازی در سیستم‌های عامل ویندوز و OS/2 به کار گرفته شده‌است. فایل‌های کتابخانه‌ای در این پیاده‌سازی معمولا از پسوند DLL استفاده می‌کنند.
ساختار و قالب این فایل‌ها مانند فایل‌های اجرایی سیستم‌عامل ویندوز (فایل‌های با پسوند EXE) است، از این رو این فایل‌ها می‌توانند شامل بخش‌های مختلفی از جنس کد منبع، اطلاعات برنامه و منابع اجرایی باشند.
کتابخانه‌های اجرایی که تنها شامل اطلاعات و منابع اجرایی باشند را DLLهای منبع می‌نامند.
به عنوان مثالی از این نوع کتابخانه‌های اشتراکی می‌توان کتابخانه‌های آیکون (با پسوند ICL) و برخی از قلم‌ها (به انگلیسی: font) (با پسوندهای FON و FOT) اشاره کرد.
سیستم‌های عامل بر پایه یونیکس
در بسیاری از سیستم‌های عامل بر پایه یونیکس (به انگلیسی: Unix) کتابخانه‌های اشتراکی کاملا مانند برنامه‌های اجرایی عادی هستند.
استفاده از این کتابخانه‌های اجرایی در یک برنامه باعث می‌شود کتابخانه اشتراکی مورد استفاده قبل از بارگذاری برنامه اصلی در فضای حافظه برنامه قرار گیرد، سپس برنامه اصلی بارگذاری شده، ارجاع‌های انجام شده در آن به کتابخانه‌های اشتراکی آدرس‌دهی می‌شوند و در نهایت اجرای برنامه اصلی شروع می‌شود.
اگر بنابر علتی بارگذاری کتابخانه اشتراکی موفقیت‌آمیز نباشد، روال اجرای برنامه اصلی با شکست روبه‌رو خواهد شد.
وظیفه بارگذاری رویه‌های کتابخانه‌های اشتراکی و برنامه اصلی در فضای آدرس دهی برنامه و در نهایت شروع روال اجرا بر عهده پیونددهنده پویا است.
در سیستم‌های عامل لینوکس (به انگلیسی: Linux) فایل‌های کتابخانه‌های اجرایی اشتراکی از پسوند SO استفاده می‌کنند.
سیستم‌های عامل macOS و iOS
در سیستم‌عامل داروین (به انگلیسی: Darwin) شرکت اپل و سیستم‌های عامل macOS و iOS که بر پایه آن بنا شده‌اند نوع پیونده‌دهنده پویایی که باید برای پیونددادن برنامه و کتابخانه‌های مورد استفاده‌اش استفاده شود در زمان پیوند مشخص می‌شود. به این منظور آدرس فایل اجرایی دودویی این پیونددهنده در فضای آدرس دهی پردازه قرار داده می‌شود.
فایل‌های کتابخانه‌های اشتراکی در این سیستم‌های عامل از پسوند DYLIB استفاده می‌کنند.
برنامه اجرایی در این سیستم‌های عامل می‌تواند حین اجرای پیوند دهنده یا حین اجرای خود با پیونددهنده پویا تعامل داشته باشد. به این صورت پیوند دهنده پویا منابعی را با برنامه پیوند خواهد داد که در روال اجرای برنامه مورد نیاز هستند.
از این رو ممکن است منابع بارگذاری شده در دفعات مختلف اجرای یک برنامه متفاوت باشند.
در این سیستم‌های عامل، یک برنامه می‌تواند مدت‌ها پس از شروع اجرایش با تعامل با پیوند دهنده باعث بارگذاری منابع بیشتر یا خارج کردن منابع قبلی از حافظه شود.
این رفتار ویژه به منظور ارائه سرویس‌های مورد نیاز در رابط‌های برنامه‌نویسی کاربردی (به انگلیسی: Application Programming Interface یا API) شرکت اپل مانند Cocoa و Objective-C در نظر گرفته شده‌است.
پیونددهنده پویای اپل در سیستم‌عامل macOS یک پیونده‌دهنده متن باز است که از طریق پروژه متن باز اپل در دسترس عموم قرار دارد.
سیستم‌های عامل یونیکس بر پایه XCOFF
در سیستم‌های عامل بر پایه XCOFF مانند AIX شرکت IBM فایل‌های کتابخانه‌های اجرایی اشتراکی از پسوند A استفاده می‌کنند.
پیوند مستقیم
جهنم DLL
بارگذاری پویا
اتصال دیرهنگام
پیش اتصال
حذف کد مرده