نقل قول: C run-time library
موردی که من مطرح کردم تنها نکته ای برای مقاله شما بود که مجددا اینجا توضیحاتی می دهم.
اول اینکه باید نوع پروژه مشخص شود، که پروژه شما از نوع MFC هست.
پروژه های MFC نیازمند دو دسته کتابخانه هستند:
1- کتابخانه های MFC
2- کتابخانه های C run-time
اگر پروژه ای قرار هست کلا بدون نیازمندی به dll ای ساخته شود باید هر دو مورد فوق به صورت static لینک شوند نه فقط کتابخانه های MFC.
در مقاله، مورد اول را در Properties از طریق Use MFC in a static library لینک کردید.
اما مورد دوم را ذکر نکردید، یعنی :
Project -> Properties ->C/C++ -> Code Generation -> Runtime library -> /MT
هر چند که با اعمال مورد اول، مورد دوم نیز خودکار معمولا توسط کامپایلر تنظیم می شود، اما تنها جهت محکم کاری باید آن را چک کرد.
در هر دو مورد فوق لینک کردن به شکل static معایب و محدودیت هایی دارد که به برخی از آن ها در لینک زیر اشاره کرده ام:
http://www.barnamenevis.org/sh...d.php?t=151958
پس اگر این دو مورد انجام شوند آنگاه فایل اجرایی بی نیاز به نصب کتابخانه ای هست، اما باید محدودیت های احتمالی را در نظر بگیرید و در جای درست به شکل static برنامه را عرضه کنید.
در پایان مطلبی از توصیه های مایکروسافت جهت استفاده نکردن از حالت static linking تا جای ممکن:
نقل قول:
Prefer dynamic linking over static linking:
It is not recommended to redistribute C/C++ applications that statically link to Visual C++ libraries. It is often mistakenly assumed that by statically linking your program to Visual C++ libraries it is possible to significantly improve the performance of an application. However the impact on performance of dynamically loading Visual C++ libraries is insignificant in almost all cases. Furthermore, static linking does not allow for servicing the application and its dependent libraries by either the application's author or Microsoft. For example, consider an application that is statically linked to a particular library, running on a client computer with a new version of this library. The application still uses code from the previous version of this library, and does not benefit from library improvements, such as security enhancements. Authors of C/C++ applications are strongly advised to think through the servicing scenario before deciding to statically link to dependent libraries, and use dynamic linking whenever possible.
همان طور که می بینید رفع نواقص یا حتی موارد امنیتی که توسط windows update انجام می شوند در حالت static دیگر قابل اعمال نیستند.
نقل قول: C run-time library
اتفاقا این بحث سوال من هم بود!!!
برای ایجاد پروژه در win32 به شکل static library باید چه کرد؟ آیا مراحل شبیه همینه؟
نقل قول: C run-time library
نقل قول:
نوشته شده توسط
emadfa
اتفاقا این بحث سوال من هم بود!!!
برای ایجاد پروژه در win32 به شکل static library باید چه کرد؟ آیا مراحل شبیه همینه؟
برای win32 فقط باید مورد دوم را انجام دهید، یعنی همان سوپیچ /MT
نقل قول: C run-time library
اگه به صورت Static کامپایل کنید، کدهای C runtime library داخل همون فایل EXE قرار میگیرن و مشکل حل میشه. البته من با VS2005 و VS2008 امتحان کردم.
نقل قول: C run-time library
نقل قول:
در کامپایلرهای جدید همواره نسخه C run-time library که برای کتابخانه های استاندارد زبان ++C/C هستند (تحت عنوان visual C++ libraries) باید در سیستم کاربر نصب شوند یا dll های مورد نیاز در کنار فایل اجرایی کپی شوند. (در هر حال این موارد کمتر از 3MB است )
من يك پروژه MFC با VC2008 دارم كه ميخوام اون رو روي يك سيتم ديگر اجرا كنم مي شود اين كتباخانه هاي c run-tim و MFC رو برام توي يك فايل زيپ قرار بديد تا در پوشه برنامه ام در سيتم هدف كپي نمايم.
ممنون
نقل قول: C run-time library
نقل قول:
نوشته شده توسط
Jenab4372
من يك پروژه MFC با VC2008 دارم كه ميخوام اون رو روي يك سيتم ديگر اجرا كنم مي شود اين كتباخانه هاي c run-tim و MFC رو برام توي يك فايل زيپ قرار بديد تا در پوشه برنامه ام در سيتم هدف كپي نمايم.
ممنون
در کامپایلرهای نسخه 2005 و 2008 باید یک setup برای برنامه خود بسازید، dll ها خودکار تشخیص داده می شوند و در پروژه setup اضافه می شوند.
نسخه آینده یعنی 2010 مجددا این امکان را می دهد که Dll ها را در کنار فایل اجرایی کپی کنید.
در هر حال در صورت نیاز می توانید پروژه را به شکل static کامپایل کنید (اگر ضروری هست)