View Full Version : سوال: شرایط اجرای برنامه های کیوت
sd.CSharpProgrammer
جمعه 11 آذر 1390, 20:16 عصر
سلام دوستان بغیر از فایلهای دی ال الی که باید کنار فایل اجرایی کنیم آیا کار دیگه ای هم در کامپیوتر مقصد باید انجام بشه تا برنامه کیوتمون اجرا شه؟! من چند روز پیش یک برنامه ساده کیوت رو ساختم برای دوستم فرستادم گفت وقتی روش کلیک میکنه فقط پنجره کنسول داس چند لحظه میاد و میره، در حالی که برنامه من دسکتاپ هست!! فکر کردم شاید باید تو system32 یه سری فایل کیوت رو بریزه ولی وقتی به فولدر سیستم خودم رفتم چیز خاصی از کیوت اونجا ندیدم. دلیل اجرا نشدنش چی بوده؟
Open-Source
جمعه 11 آذر 1390, 22:26 عصر
اگه پروژه ات بصورت release کامپایل کردی باید dll های مورد نیاز (مثل: QtCore4.dll, QtGui4.dll) در کنار برنامه ات باشن . (اگه از mingw و gcc برای کامپایل استفاده کردی باید mingwm10.dll رو هم کپی کنی).
اگه پروژه ات بصورت debug کامپایل کردی باید ورژن debug اون dll ها رو کپی کنی (اسمشون مثل همونا هستند باضافه حرف d آخرشون).
و:
http://doc.trolltech.com/4.5/deployment.html
میتونی پروژه ات رو هم بصورت استاتیک کامپایل کنی:
http://open-source.blogfa.com/post-76.aspx
sd.CSharpProgrammer
جمعه 11 آذر 1390, 23:32 عصر
پروژه رو بصورت دینامیک کامپایل کردم و از نوع release. و همه فایلهایی رو که میگین + libgcc_s_dw2-1.dll کنار برنامه کپی کردم ولی همون مشکلی که گفتم رو در سیستمهای دیگه داره!
alamate_aoal
جمعه 11 آذر 1390, 23:42 عصر
برای تشخیص اینکه برنامه ی شما به کدام کتابخانه ها وابستگی دارد در ویندوز از Dependency Walker و در لینوکس از ldd استفاده کنید
khavary
شنبه 12 آذر 1390, 18:24 عصر
اگه برنامه را به صورت استاتیک کامپایل کنی سرعت برنامه کاهش پیدا میکند یا نه؟
Open-Source
شنبه 12 آذر 1390, 22:25 عصر
اگه برنامه را به صورت استاتیک کامپایل کنی سرعت برنامه کاهش پیدا میکند یا نه؟
پروژه هایی که بصورت استاتیک کامپایل میشن سرعتشون یه خورده بیشتر هم میشه.
کلا پروژ هایی که بصورت استاتیک کامپایل میشن ، قابل پیشبینی هستند ، یعنی توی سیستم مقصد وابسته به کتابخانه هایی که ممکن است تغییر کرده باشند نیستند . در حالیکه پروژه هایی که بصورت داینامیک کامپایل میشوند همیشه میتوانند ار آخرین تغییرات کتابخانه ها بهره ببرند (کتابخانه ها قابلیت ارتقا دارند) و ممکن است رفتارشون در سیستم مقصد تغییر کند.
http://en.wikipedia.org/wiki/Static_build
khavary
شنبه 12 آذر 1390, 22:47 عصر
میشه توی لینوکس به صورت استاتیک کامپایل کرد.
Open-Source
یک شنبه 13 آذر 1390, 00:50 صبح
میشه توی لینوکس به صورت استاتیک کامپایل کرد.
بله میشه.
ولی ابتدا باید پکیج Qt رو بصورت استاتیک کامپایل کنی.
http://www.qtcentre.org/wiki/index.php?title=Building_static_Qt_on_Linux
اینم بد نیست (توضیح در مورد کتابخانه های استاتیک و فرق اون با کتابخونه های داینامیک) :
http://en.wikipedia.org/wiki/Static_library
پ.ن:
این کار ممکنه یه کم مشکل ساز بشه. با یه مثال راحت تر میتونم توضیح بدم:
من از لینوکس جنتو استفاده میکنم و پکیج هام رو بصورت داینامیک کامپایل کردم ، اگه بخوام Qt رو بصورت استاتیک کامپایل کنم بعد از اون باید همه پکیج های روی سیستمم که به Qt وابسته هستند رو هم بصورت استاتیک کامپایل کنم که علاوه بر زمان بر بودن مشکلاتی رو هم برام میسازه ، مثلا با توجه به اینکه حجم پکیج های کامپایل شده به روش استاتیک بالا میره ممکنه که من توی سیستمم با مشکل کمبود Ram مواجه بشم. بعلاوه اگه بیام یه سری پکیج رو آپدیت کنم بعدش باید کلیه پکیج هایی رو هم که به اون وابسته هستند کامپایل کنم (برای بهره بردن از آخرین تغییرات) که وقت گیره.
[البته همیشه هم کامپایل به روش استاتیک باعث به هدر رفتم رم نمیشه، مثلا اگر من بیام یه lib رو که فقط توسط یه برنامه استفاده میشه بصورت استاتیک کامپایل کنم اینجوری برنامه مورد نظر من حجم چندانی توی حافظه نمیگیره ، ولی اگه بیام یه پکیج مثل Qt رو که برنامه های زیادی ازش استفاده میکنند(مثلا KDE)، بصورت استاتیک کامپایل کنم حجم زیادی از حافظه رو از دست میدم چون lib های تکراری تو حافظه لود میشن].
khavary
یک شنبه 13 آذر 1390, 18:11 عصر
من توی ویندوز تونستم استاتیک کامپایل کنم ولی توی لینوکس نتونستم
لطفا راهنمایی کنید
khavary
دوشنبه 14 آذر 1390, 12:17 عصر
مشکل حل شد..
Nima_NF
دوشنبه 14 آذر 1390, 21:52 عصر
دقت کنید از آنجایی که دارید از Qt Open Source license استفاده می کنید، اجازه ندارید از حالت Static linking استفاده کنید.
فقط در حالت dynamic linking به شکل مجانی باید استفاده کنید.
این موضوع برای اکثر کتابخانه ها با لیسانس LGPL به همین شکل هست.
Open-Source
پنج شنبه 17 آذر 1390, 01:16 صبح
دقت کنید از آنجایی که دارید از Qt Open Source license استفاده می کنید، اجازه ندارید از حالت Static linking استفاده کنید.
فقط در حالت dynamic linking به شکل مجانی باید استفاده کنید.
این موضوع برای اکثر کتابخانه ها با لیسانس LGPL به همین شکل هست.
تا اونجایی که من یادم هستش LGPL برای این ارائه شد تا بشه کتابخونه هایی رو که بصورت آزاد ارائه میشن رو توی برنامه های غیر آزاد بصورت استاتیک استفاده کرد ( اصلا میشه گفت که LGPL مخصوص ارايه کتابخونه های آزاد هستش). چون اگه کتابخونه ای تحت مجوز GPL ارائه میشد (با توجه به مباحثی مثل copyleft) ، این کتابخونه رو نمیشد توی برنامه های با مجوز غیر رایگان و حتی غیر GPL استفاده کرد .
فکر کنم این چیزی رو که شما مطرح کردید درمورد مجوز GPL هستش و برای Qt و امثال اون که تحت مجوز LGPL ارائه میشن صادق نیست.
Nima_NF
پنج شنبه 17 آذر 1390, 07:42 صبح
تا اونجایی که من یادم هستش LGPL برای این ارائه شد تا بشه کتابخونه هایی رو که بصورت آزاد ارائه میشن رو توی برنامه های غیر آزاد بصورت استاتیک استفاده کرد ( اصلا میشه گفت که LGPL مخصوص ارايه کتابخونه های آزاد هستش). چون اگه کتابخونه ای تحت مجوز GPL ارائه میشد (با توجه به مباحثی مثل copyleft) ، این کتابخونه رو نمیشد توی برنامه های با مجوز غیر رایگان و حتی غیر GPL استفاده کرد .
فکر کنم این چیزی رو که شما مطرح کردید درمورد مجوز GPL هستش و برای Qt و امثال اون که تحت مجوز LGPL ارائه میشن صادق نیست.
اول دقت کنید لیسانس ها شماره دارند (Qt از LGPL 2.1 و همین طور GPL 3.0 پیروی می کند)
در حالت 2.1 LGPL فقط در صورتی که کدهای خود Qt را تغییر دادید باید آن ها را منتشر کنید، اما سورس برنامه خودتان می تواند بسته بماند.
در حالت 3.0 GPL شما باید سورس کدهای برنامه خودتان را هم منتشر کنید.
در مورد عدم استفاده از حالت static و استفاده از حالت Dynamically link برای لیسانس LGPL قسمت لیسانس سایت Qt را مطالعه کنید. ما در پروژه هامون همیشه با این موارد مشکل داشتیم.
لیسانس LGPL 2.1 برای Qt:
Users can develop proprietary applications that dynamically link to the Qt libraries without having to release their application source code.
حالا Static در LGPL برای چی هست؟ مثلا شما می توانید برنامه خود را به صورت open source عرضه کنید، اما وقتی فایل اجرایی را منتشر می کنید آن را به شکل static linking عرضه کنید، البته باز باید دقیق شرایط ترکیبی را از سایت رسمی gnu.org مطالعه کنید، در قوانین دقیق ذکر شده است.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.