پیونددهنده

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

## پانویس

## منابع

* 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 https://web.archive.org/web/20071001000734/http://www.bitsavers.org/pdf/ibm/360/Y28-6610_LinkEdit(E)_PLM.pdf
* Douglas W. Jones, *Assembly Language as Object Code*. Software-Practice and Experience 13, 8 (اوت ۱۹۸۳)
* John R. Levine: *Linkers and Loaders*, Morgan Kaufmann, . 2000 http://www.iecc.com/linker/
* Leon Presser, John R. White: *Linkers and Loaders*. ACM Computing Surveys, Volume 4, Number 3, September 1972, pp. 149–167 http://www-inst.eecs.berkeley.edu/~cs162/sp06/hand-outs/p149-presser-linker-loader.pdf
* David Salomon, *Assemblers and Loaders*. 1993 http://www.davidsalomon.name/assem.advertis/asl.pdf

## پیوند به بیرون
* 
* Linkers and Loaders، یک مقاله مجله لینوکس توسط Sandeep Grover

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