معرفی فریمورک اپلیکیشن نویسی Qt ‏(5)

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

خب شما برای اینکه برنامه رو آماده و مستقل کنید باید فایلهای لازم رو از فریمورک کیوت دراختیارش بذارید که این فایلها عمدتا یکسری dll هستن.

یک راه بدوی و احتمالا غیراصولی اینه که برای پیدا کردن فایلهای لازم برای برنامه، بسادگی روی فایل اجرایی برنامه دابل کلیک میکنیم و در پیام های خطایی که داده میشه اسم فایلهای لازم رو تشخیص داده و بعد در مکانهای مربوطه (دایرکتوری نصب کیوت و MinGW که در نسخه های اخیر همراه با خود کیوت در دایرکتوری کیوت نصب میشه) اونها رو پیدا کرده و یک کپی از اونها رو کنار فایل اجرایی برنامه قرار میدیم.
مثلا با کلیک بر روی فایل اجرایی برنامهء Hello World (فایل اجرایی برنامهء شما در فولدر release قرار داره) که بعنوان مثال در این تاپیک درج کردیم، اولین پیام خطایی که دریافت میکنیم اینه:

This application has failed to start because mingwm10.dll was not found. Re-installing the application may fix this problem

همونطور که میبینید اولین فایلی که برنامهء ما طلب میکنه mingwm10.dll هست. من این فایل رو براحتی در E:\QT\mingw\bin پیدا کرده و یک کپی از اون رو کنار فایل اجرایی برنامه قرار میدم (من کیوت خودم رو در E:\QT نصب کرده ام اما آدرس مال شما احتمالا فرق داره).
حالا با اقدام به اجرای برنامه، پیام:

This application has failed to start because QtCore4.dll was not found. Re-installing the application may fix this problem

دریافت میشه که میبینیم اینبار فایل QtCore4.dll رو درخواست میکنه.
این فایل رو هم در آدرس E:\QT\qt\bin پیدا و کپی کردم.
بعد یک فایل دیگر مورد نیاز هم QtGui4.dll هست و همونطور که از اسمش مشخصه محتوی اجزای رابط کاربری گرافیکی کیوت هست، به همین ترتیب در E:\QT\qt\bin پیدا و کپی کردم.
حالا برنامهء ما با کلیک کردن روی اون اجرا میشه و کافیه برنامه رو همراه با فایلهایی که به این روش پیدا و کپی کردیم پکیج کنیم. یعنی هرجا فایل اجرایی برنامه میره، فایلهای دی ال ال هم در دسترسش باشن.
راستی وقتی با امکان search ویندوز داخل دایرکتوری نصب کیوت دنبال فایلهای لازم میگردید، اگر دو نسخهء مختلف از فایل مورد نظر پیدا شد، هرکدام که با کپی کردنش برنامتون اجرا شد یا فایل dll بعدی رو درخواست کرد، همون فایل صحیح هست. مثلا کیوت من یکسری فایل مشابه در E:\QT\bin هم داره که برنامم با اونها کار نمیکنه. طبق تحقیقی که در اینباره انجام دادم، دو سری بودن این فایلها ظاهرا به این خاطر هست که یک سری از اونها (اونهایی که در E:\QT\bin هستن) برای اجرای برنامه های خود کیوت هستن و جزو توزیع استاندارد کتابخانهء کیوت نیستن (علت این امر بماند که به بحث ما مربوط نمیشه و مجالش نیست).
یک راه دیگه برای پیدا کردن dll های مورد نیاز، استفاده از برنامه هایی مثل Dependency Walker هست که dll هایی رو که یک برنامه ازشون استفاده میکنه با خیلی جزییات و اطلاعات مربوط دیگه لیست میکنن. برنامهء Dependency Walker رو میتونید از این آدرس بصورت رایگان دانلود کنید (حجمش هم کمه): http://www.dependencywalker.com
دقت کنید هر dll ای که اینطور برنامه ها لیست میکنن رو نباید در کل سیستم سرچ و با برنامه پکیج کرد، چون خیلی از اونها dll های خود ویندوز هستن و در تمام سیستمها وجود دارن و نیازی به همراه بودنشون با برنامه نیست.
تقریبا تمام برنامه های کیوت (نسخهء اپن سورس که با MinGW کامپایل میشه) نیاز به این فایلها دارن:

mingwm10.dll
libgcc_s_dw2-1.dll (این فایل در نسخه های اخیر اضافه شده)
QtCore4.dll
QtGui4.dll

و یک سری برنامه ها تنها به همین فایلها نیاز دارن و کار تمامه، اما اگر برنامهء شما از امکانات دیگری استفاده میکنه باید dll های دیگری رو هم اضافه کنید. یک نمونه از امکانات دیگه مثل کارهای شبکه/اینترنتی هست که نیاز به فایل QtNetwork4.dll داره.
در فهرست بالا تنها درصورتی به فایل QtGui4.dll نیاز نیست که برنامه از اجزای کتابخانهء رابط گرافیکی کیوت و امکانات مربوطه استفاده نکنه.
بنابراین شما میتونید این سه فایل رو همراه تقریبا هر برنامه ای بذارید و دیگه مراحلی رو که گفتم طی نکنید. اما بهرحال اگر برنامهء شما dll دیگری رو طلب کرد یا از امکان خاصی استفاده میکنه (اما ممکنه پیام خطایی هم نده)، باید dll های مربوط دیگر رو هم پیش برنامتون بذارید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>