**پیوندده** (به انگلیسی: linker) برنامه‌ای کاربردی است که قطعه‌برنامه‌های (ترجمه (رایانه) شده) و پرونده‌های داده‌ای را برای ایجاد یک برنامه اجرایی با یکدیگر پیوند می‌دهد. این برنامه می‌تواند کارهای دیگری هم انجام دهد مثلاً ایجاد کتابخانه‌ها.

به این قطعات کوچک که ممکن است به تنهایی قابل اجرا نباشند، آبجکت‌فایل گفته می‌شود.

در سکوهای یونیکس پیوندده را اکثراً *Loader* می‌نامند.
این نام‌گذاری برای قائل شدن تفاوتی بین زمان اجرا یا زمان کامپایل پروسه‌است.
البته در بعضی سیستم‌عاملها این دو کار توسط یک برنامه انجام می‌شود. (لینک پویا)

برنامه‌های کامپیوتری معمولاً از چندین قطعه یا آبجکت‌فایل تشکیل می‌شوند؛ و معمولاً فایل واحدی به قطعات دیگر ارجاع می‌دهد.

لینکر همچنین می‌تواند از آبجکت‌فایلهای موجود در مجموعه‌ای واحد موسوم به *کتابخانه* استفاده کند.

معادل پیوندده از فرهنگ تشریحی کامپیوتر (داریوش فرسایی)، دانشیار ۱۳۷۹ خ است.

 یک تصویر از روند پیوند فایل‌های Object و کتابخانه‌های ایستا به یک کتابخانه جدید یا اجرایی سرهم می‌شوند.
در محاسبات، یک **پیوند دهنده** یا **ویرایشگر پیوند** یک برنامه سودمند رایانه ای است که یک یا چند فایل شیء تولید شده توسط یک گردآورنده را دریافت کرده و آنها را به یک فایل اجرایی تکی، فایل کتابخانه یا یک فایل «شی» دیگر تبدیل می‌کند.

یک نسخه ساده‌تر که خروجی خود را مستقیماً در حافظه ثبت می‌کند بارگذار نامیده می‌شود، هر چند بارگذاری به‌طور معمول به عنوان یک فرایند جداگانه در نظر گرفته می‌شود.

بررسی اجمالی
------------

برنامه‌های کامپیوتری معمولاً شامل چند بخش یا پیمانه هستند؛ این قطعات / پیمانه‌ها نباید شامل یک پرونده شی تکی باشند، و در این چنین مواردی با استفاده از نمادها به عنوان نشانی به سایر پیمانه‌ها، که در هنگام پیوند برای اجرای، به آدرس‌های حافظه می‌رسند، به یکدیگر مراجعه می‌کنند. به‌طور معمول، یک فایل شیء می‌تواند شامل سه نوع نماد باشد:

* نمادهای «خارجی» تعریف شده، که گاهی اوقات نمادهای «عمومی» یا «ورود» گفته می‌شود، و اجازه می‌دهد توسط دیگر پیمانه‌ها فراخوانده شود،
* نمادهای «خارجی» تعریف نشده، که مرجعی برا دیگر پیمانه‌ها است که این نمادها کجا تعریف شده‌اند، و
* نمادهای محلی، در داخل فایل شیء به منظور تسهیل جابجایی استفاده می‌شود.

برای اکثر گردآورنده‌ها، هر فایل شیئی نتیجه گردآوری یک فایل کد منبع ورودی است. هنگامی که یک برنامه از فایل‌های چند شیئی تشکیل شده‌است، پیوند دهنده این فایل‌ها را به یک برنامه قابل اجرای یکپارچه تبدیل می‌کند و نمادها را با هم ادغام می‌کند.

لینکرها می‌توانند اشیا را از مجموعه ای که *کتابخانه* یا کتابخانه زمان اجرا نامیده می‌شود بگیرند. اکثر پیوند دهنده‌ها کل کتابخانه در خروجی را شامل نمی‌شوند. آنها فقط شامل پرونده‌هایی هستند که توسط سایر پرونده‌ها یا کتابخانه‌ها اشاره شده‌است. اگرچه ممکن است پیوند کتابخانه یک فرایند تکراری باشد، با پیمانه‌هایی شامل نیاز به اتصال به پیمانه‌های اضافی و غیره. کتابخانه‌ها برای مقاصد مختلف وجود دارند و یک یا چند کتابخانه سیستم معمولاً به صورت پیش فرض پیوند داده شده‌اند.

پیوند دهنده همچنین وظیفه مرتب کردن اشیا در فضای نشانی برنامه را بر عهده دارد. این ممکن است شامل *نقل مکان کردن* کدی باشد که یک آدرس پایه خاص را به پایگاه دیگری متصل می‌کند. از آنجا که یک گردآورنده به ندرت می‌داند که یک شی در کجا قرار دارد، اغلب یک مکان پایه ثابت (به عنوان مثال صفر) را در نظر می‌گیرد. نقل مکان کردن کد ماشین ممکن است شامل دوباره هدف‌گیری جهش‌های مطلق، بارها و پایگاه‌ها باشد.

خروجی اجرایی توسط پیوند دهنده ممکن است نیاز به جواز نقل مکان دیگری را داشته باشد، وقتی که در نهایت روی حافظه (درست قبل از اجرای) بارگیری شده‌است. این گذر معمولاً در سخت‌افزار ارائه حافظه مجازی حذف می‌شود: هر برنامه در فضای آدرس خود قرار گرفته می‌شود، بنابراین حتی اگر همه برنامه‌ها در یک آدرس پایه یکسان بارگذاری شوند، هیچ تداخلی وجود ندارد. این پرونده همچنین ممکن است حذف شود در صورتی که اجرایی یک موقعیت مستقل باشد.

در برخی از متغیرهای یونیکس، مانند SINTRAN III، فرایند ارائه شده توسط یک پیوند دهنده (سرهم‌بندی فایل‌های شیء در یک برنامه) *بارگذاری گفته می‌شد* (مانند بارگذاری کد اجرایی بر روی یک فایل). علاوه بر این، در برخی از سیستم عامل‌ها، همان برنامه، هر دو عمل ارتباط و بارگذاری یک برنامه را مدیریت می‌کند (پیوند پویا).

پیوند پویا
----------

بسیاری از محیط‌های سیستم عامل اجازه پیوند پویا را می‌دهند، تا زمانی که یک برنامه اجرا شود، قطعنامه‌های برخی از نمادهای نامشخص را به تعویق انداخته‌است. این به آن معناست که کد اجرایی هنوز حاوی نمادهای نامشخص می‌باشد، به علاوه یک لیست از اشیاء یا کتابخانه‌هایی که تعاریفی برای آنها ارائه خواهد داد. بارگذاری برنامه این اشیاء / کتابخانه‌ها را نیز بارگذاری می‌کند و پیوند نهایی را انجام می‌دهد.

این رویکرد دو مزیت دارد:

* کتابخانه‌هایی که به‌طور معمول مورد استفاده قرار می‌گیرند (به عنوان مثال کتابخانه‌های استاندارد سیستم) باید فقط در یک مکان ذخیره شوند، نه اینکه در هر فایل اجرایی تکثیر شوند، بنابراین حافظه محدود و فضای دیسک را ذخیره می کنند.
* اگر یک نقص در عملکرد یک کتابخانه با جایگزینی کتابخانه اصلاح شود، تمام برنامه‌هایی که آن را استفاده می‌کنند به صورت پویا از اصلاح پس از راه اندازی مجدد آنها بهره‌مند خواهند شد. برنامه‌هایی که شامل این تابع با اتصال ثابت بوده‌اند، ابتدا باید دوباره مرتبط شوند.

معایبی نیز وجود دارد:

* پلتفرم شناخته شده ویندوز با عنوان "DLL HELL "، یک کتابخانه به روز شده ناسازگار می‌باشد که اعمالی را که وابسته به نسخه قبلی کتابخانه هستند را مختل می‌کند، در صورتی که نسخه جدید تر به طرز اشتباهی سازگاری عقبرو نداشته باشد.
* یک برنامه همراه با کتابخانه ای که از آن استفاده می‌کند ممکن است به عنوان یک بسته (مثلاً به صحت، الزامات اسناد یا عملکرد) گواهی شده باشد، اما نه اگر اجزاء بتوانند جایگزین شوند. (همچنین این مسئله علیه به روز رسانی خودکار سیستم عامل در سیستم‌های بحرانی استدلال می‌کند؛ در هر دو مورد سیستم عامل و کتابخانه‌ها بخشی از یک محیط *واجد شرایط* هستند)

پیوند ایستا
-----------

پیوند ایستا نتیجه این عمل پیوند دهنده است که همه برنامه‌های کتابخانه مورد استفاده در برنامه را به تصویر اجرایی کپی می‌کند. این ممکن است نیاز به فضای دیسک و حافظه بیشتری نسبت به پیوند پویا داشته باشد، اما قابل حمل تر است، چرا که نیازی به حضور کتابخانه روی سیستم مورد نیازش و در جایی که اجرا می‌شود نیست. پیوند ایستا همچنین "DLL HELL "را از بین می‌برد، زیرا هر برنامه دقیقاً نسخه‌هایی از کتابخانه‌های مورد نیاز را فراهم می‌کند که تداخلی با برنامه‌های دیگر ندارند. یک برنامه که فقط چند روال از یک کتابخانه را استفاده می‌کند نیازی به نصب کل کتابخانه ندارد.

نقل مکان
--------

همان‌طور که گرداورنده هیچ اطلاعاتی در مورد طرح اشیاء در خروجی نهایی ندارد، نمی‌تواند از دستورالعمل‌های کوتاه‌تر یا کارآمدتری بهره ببرد که نیازمندی خاصی را جایگزین نشانی یک شی دیگر می‌کند. به عنوان مثال، دستورالعمل پرش می‌تواند یک آدرس مطلق یا یک جرقه از موقعیت فعلی را ارزیابی کند، و جبران ممکن است با طولهای متفاوت با توجه به فاصله تا هدف بیان شود. با ایجاد محافظانه کارنه‌ترین دستورالعمل‌ها (معمولاً بزرگترین نوع نسبی یا مطلق بسته به بستر) و اضافه کردن *نکات سست سازی*، ممکن است دستورالعملهای کوتاهتر یا کارآمدتری را در طول لینک نهایی جایگزین کنید. این مرحله تنها بعد از اینکه تمام اشیاء ورودی خوانده شد و آدرس موقت اختصاص داده شده انجام می‌شود؛ **پیوند دهنده سست ساز** پس از آن آدرس مجدد را اعلان می‌کند، که ممکن است به نوبه خود باعث سستی بیشتر شود. به‌طور کلی، توالی‌های جایگزین کوتاه‌تر هستند، که این اجازه می‌دهد این فرایند همواره بهترین راه حل با توجه به نظم ثابت اجسام همگام باشد. اگر این مورد نباشد، سستی می‌تواند تداخل ایجاد کند و پیوند دهنده باید مزایای هر دو گزینه را محاسبه کند.

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

ویرایشگر پیوند
--------------

در IBM System / 360 محیط های اصلی مانند OS / 360، از جملهz / OSبرای رایانه‌های z / Architecture، این نوع برنامه به عنوان یک *ویرایشگر پیوند* شناخته می‌شود. همان‌طور که از نام نشان می‌دهد یک *ویرایشگر* لینک دارای قابلیت اضافی اجازه دهی می‌باشد. علاوه بر این، جایگزینی و / یا حذف بخش‌های برنامه‌های فردی نیز از دیگر قابلیت‌های آن می‌باشد. سیستم‌های عامل مانند OS / 360 دارای فرمتی برای load-modulesهای اجرایی هستند که حاوی اطلاعات تکمیلی در مورد جزء جزء یک برنامه هستند، به طوری که می‌توان یک بخش خاص و جداگانه برنامه را جایگزین کرد و سایر قسمت‌های برنامه به روز می‌شود تا آدرس‌ها و سایر مراجع قابل انتقال با استفاده از ویرایشگر پیوند به عنوان بخشی از روند، اصلاح می‌شود.

یک مزیت این امر ان است که اجازه می‌دهد یک برنامه بدون نیاز به نگه داشتن تمامی پرونده‌های شیء میانجی یا بدون نیاز به گردآوری دوباره بخش‌هایی از برنامه که تغییر نکرده باشند نگهداری شود. همچنین اجازه می‌دهد به روز رسانی برنامه‌ها در قالب فایل‌های کوچک توزیع شود (در اصل عرشه کارت‌ها)، که تنها شامل پیمانه شی که باید جایگزین شود می‌باشد. در چنین سیستمی، کد شیء در شکل و فرمت ۸۰ بایت تصاویر کارت پانچ قرار دارد، به طوری که به روزرسانی‌ها می‌توانند در یک سیستم با استفاده از آن رسانه معرفی شوند. در نسخه‌های بعدی OS / 360 و در سیستم‌های بعدی، بار-پیمانه‌ها شامل اطلاعات اضافی در مورد نسخه‌های پیمانه‌های اجزای سازنده، برای ایجاد یک مدرک قابل پیگیری از به روز رسانی است.

اصطلاح «ویرایشگر پیوند» نباید به معنای این باشد که برنامه در یک حالت تعاملی کاربر مانند یک ویرایشگر متن عمل می‌کند. این برنامه برای اجرای بیتی در نظر گرفته شده‌است؛ دستورات ویرایش توسط کاربر در فایل‌های متوالی سازماندهی شده مانند کارت‌های پانچ، DASD یا نوار مغناطیسی عرضه می‌شود و نوارها اغلب در هنگام نصب اولیه سیستم عامل استفاده می‌شوند.

جستارهای وابسته
---------------

* درگاه برنامه‌نویسی

* جهنم دی‌ال‌ال
* پیونددهنده پویا
* کتابخانه پیوند پویا
* گنو لینکر
* کتابخانه (رایانه)

منابع
-----

1. ↑  *What is loader*.
2. ↑  IBM Corporation (1972). *IBM OS Linkage Editor and Loader* (PDF).
3. ↑   *راهنمای کاربر BRF-LINKER*. ND-60.196.01. 08/84
4. ↑  *Linkers and Dynamic Linking*. 2013.
5. ↑  *No End to DLL Hell*.
6. ↑  *Static Libraries vs. Dynamic Libraries*.
7. ↑  *Linker Relaxation in the RISC-V Toolchain*.
8. ↑  *IBM OS/360*.
9. ↑  *z/OS*.
10. ↑  *z/Architecture*.

### استناد

### منابع


* David William Barron, *Assemblers and Loaders*. 1972, Elsevier.
* C. W. Fraser and D. R. Hanson, *A Machine Independent Linker*. Software-Practice and Experience 12, 4 (آوریل ۱۹۸۲).
* IBM Corporation, *Operating System 360, Linkage Editor, Program Logic Manual*, 1967
* Douglas W. Jones, *Assembly Language as Object Code*. Software-Practice and Experience 13, 8 (اوت ۱۹۸۳)
* John R. Levine: *Linkers and Loaders*, Morgan Kaufmann, شابک ‎۱−۵۵۸۶۰−۴۹۶−۰. 2000
* Leon Presser, John R. White: *Linkers and Loaders*. ACM Computing Surveys, Volume 4, Number 3, September 1972, pp. 149–167
* David Salomon, *Assemblers and Loaders*. 1993

پیوند به بیرون
--------------

* پست‌های ارسال شده *اتصال دهنده* یان لنس تیلور
* Linkers and Loaders، یک مقاله مجله لینوکس توسط Sandeep Grover
* فهرستی دیگر از کجا مجموعه کاملی از ابزارهای رایگان برای توسعه زبان مونتاژ را دریافت کنید