PDA

View Full Version : حجم بالای فایل های کامپایل شده با MinGW



systole
سه شنبه 27 فروردین 1392, 01:25 صبح
سلام دوستان
من از آخرین نسخه DevC++ IDE استفاده می کنم اما فایل هایی که کامپایل می کنم حجمش میشه حدود 500 کیلوبایت اما اگه همین برنامه رو با ویژوال استودیو کامپایلش کنم حجمش 50 کیلوبایت هم نمیشه یکم با گزینه های کامپایل ور رفتم اما نتیجه نداد...در ضمن منظورم برنامه کنسول بود...

ممنون میشم راهنمایی بفرمایید . اگه ممکنه علت رو هم بگین به صورت بنیادین!!!!

با تشکر

UfnCod3r
سه شنبه 27 فروردین 1392, 08:59 صبح
شما وقتی با MSVC کامپایل می کنی برنامه به MSVCP...dll , MSVCR...dll نیاز داره .
ولی با MinGW اونا رو نمی خواد فکر کنم یه سری چیزا استاتیک لینک میشه .
:متفکر:
500 کیلوبات فکر نکنم حجم زیادی باشه ها
:متفکر:

systole
سه شنبه 27 فروردین 1392, 16:56 عصر
سلام
دوست من ممنون از جوابتون اما من هنوز قانع نشدم!!!
اگه میشه یکی از دوستان مکانیسم اجرای برنامه در ویندوز رو برام شرح بده...
مگه این طور نیست که کامپایلر برنامه های ما رو به زبان ماشین تبدیل میکنه؟خب هر ماشینی هم میتونه برنامه های مربوط به خودشو اجرا کنه! درسته؟البته با پل ارتباطی سیستم عامل.
خب پس چه نیازی به این فایل های DLL هست؟اینجا هست که باید مکانیسم اجرای برنامه ها در سیستم عامل برام روشن بشه...اگه ممکنه دوستان برام این موضوع رو روشن کنن و اگر مقاله ای سراغ دارن معرفی کنن.

از طرفی وقتی من با همون کامپایلر MinGW یه برنامه C کامپایل میکنم حجمش میشه مثلا حدود 15 کیلوبایت!!! یعنی بیش از 400 کیلوبایت اختلاف!!!(دقت کنید یه برنامه مشابه مثلا Hello World خودمون!!!!)

جالب تر اینکه همون برنامه c با کامپایلر TCC حجمش میشه فقط 1.5 کیلوبایت!!!!

این اختلاف حجم ها چطور توجیه میشه؟

ممنون میشم مسئله رو برام روشن کنید چون داره روحمو میخوره!!!!

UfnCod3r
سه شنبه 27 فروردین 1392, 17:58 عصر
بهتره یکم درمورد لینک کردن Static , Dynamic سرچ کنی .
شما وقتی یه برنامه می نویسی
و تابعی صدا می زنی که جز برنامت نیست . مثل printf
خب این تابع قبلن نوشته شده و کامپیل شده و شما استفاده می کنی یعنی کد هاش توی فایل .dll ـش هست و شما فقط تو برنامت تابعو صدا می زنی .
پس برنامه شما هم به اون دی ال ال وابسته هست .
مثلا شما برنامه ای که با MSVC++‎‎10 می نویسی به دی MSVCP10.dll, MSVCR10.dll نیاز داره .
لازمم نیست هر برنامه ای اون دی ال ال رو کنار فایل اجرایی خودش داشته باشه . فقط کافیه اون دی ال ال تو شاخه ویندوز باشه تا همه برنامه ها استفاده کنن .
ولی تو حالت لینک شدن استاتیک محتویات اون دی ال ال به برنامه شما اضافه میشه و دیگه به اون دی ال ال نیاز نیست ولی حجم برنامه بیشتر میشه .
یه سری برنامه ها هستن که میشه فهمید برنامه شما به چه چیزا نیاز داره .
درضمن رو حالت Release کامپایل کنید و حجم رو ببنید .

systole
چهارشنبه 28 فروردین 1392, 11:11 صبح
متشکرم
پس با این تفاسیر ، مثل این میمونه ما خودمون یه سری کلاس طراحی کنیم و اونو به صورت DLL در برناممون استفاده کنیم.
تا جایی که یادمه دلفی هم همین طوره اما یه امکانی داشت که می شد تنها یه سری کلاس هایی که نیاز بود رو به برنامه لینک کرد این کامپایلر همچین قابلیتی نداره؟

میشه بگید کامپایلر با کدهای C چیکار می کنه که این همه کم حجم هستن؟

systole
پنج شنبه 29 فروردین 1392, 13:39 عصر
کسی از دوستان نبود راهنمایی بفرمایند؟