من می خواستم بدونم برنامه های ++C هم نیاز به فایل کمکی مثل برنامه های ویبی نیاز داره
یعنی باید برای اجرای برنامه های ++C فایلی بر روی کامپیوتر باشه
مثل VisualBasic RunTime Libarary برای برنامه های ویژوال بیسیک
آره یه جورایی ولی تقریبا رو همه کامپیوترا هست
برنامه هایی که با امکانات و کتابخونه استاندارد زبان ++C ( همون STL ) نوشته میشن به هیچ چیزی برای اجرا شدن نیاز ندارند . متاسفانه فعلا زبان استاندارد ++C و کتابخونه STL شامل امکاناتی مثل ارتباط با دیتابیس ، برنامه نویسی شبکه ، Threading و ..... نمیشن در نتیجه شما باید از کتابخونه های جانبی برای انجام دادن اینکار ها کمک بگیرید ( یک مثال از این کتابخونه های جانبی همین توابع API داخل dll های ویندوز هستند !!)
معمولا برنامه نویسان وی بی تصور میکنند که نیاز به یک کتابخونه جانبی باعث میشه که برنامه ها به یک فایل یا چند فایل دیگه وابسته بشن که این همیشه در مورد زبان هایی مثل ++C صادق نیست .
برنامه نویسان وی بی فقط مجاز هستند که از link کردن در زمان run-time یا زمان اجرای برنامه بهره بگیرند ( بهش میگن Dynamic library linkage ) و همین باعث میشه برنامه های وی بی به فایلهای مختلفی در زمان اجرا وابستگی پیدا کنند . اما در زبانی مثل ++C و بکمک محیط های برنامه نویسی مثل ++VC ما میتونیم به Linker بگیم چطور این عمل رو انجام بده ( به شرطی که اون کتابخونه این رو اجازه بده - به اینجور کتابخونه ها میگن کتابخونه های استاتیک ) !!
پس بعلاوه اون Dynamic linkage کتابخونه جانبی ما میتونیم از linker بخواییم که عمل link رو بشکل static انجام بده ( یعنی در زمان ساخت فایل اجرایی) و همین باعث میشه که برنامه ما دیگه نیازی به اون فایل نداشته باشه و مستقل اجرا بشه .
نمونه بارز این مسئله رو در برنامه هایی ویندوزی که با کتابخونه MFC نوشته میشن میشه دید . کتابخونه MFC دو شکل برای لینک کردن در اختیار ما میگذاره : 1 - استاتیک و 2 - داینامیک .
حالت اول باعث میشه که برنامه تولید شده یک فایل کاملا مستقل باشه و بدون نیاز به هیچ فایل جانبی اجرا بشه ، اگرچه حالت داینامیک باعث میشه که برنامه به یکسری از dll های خاص MFC وابسته باشه و در زمان اجرا وجود اونها الزامیه !
شاید بزرگترین مشکل لینک بشکل استاتیک اینه که حجم برنامه به مقدار قابل توجهی زیاد میشه و برای همین معمولا این تکنیک در برنامه های تجاری کمتر استفاده میشه .