PDA

View Full Version : مشکل عجیب در اجرا و اجرا برنامه به شکل Static بدون dll ها



baradar
چهارشنبه 05 خرداد 1389, 17:31 عصر
با سلام
من جدید ترین نسخه qt رو دانلود کردم و با اون در محیط qt creator یک پروزه gui ساختم و وان رو در حالت release ساختم و حالا dll های لازم رو در کنار اون قرار دادم ولی وقتی می خوام اون رو اجرا کنم این خطای زیر رو میدهد( البته من اون رو در محیط Qt creator ساختم نه از طریق خط فرمان)
لطفا به عکس زیر نگاه کنید و مرا راهنمایی کنید
با تشکر

Nima_NF
چهارشنبه 05 خرداد 1389, 17:55 عصر
معمولا به خاطر استفاده از نسخه های متفاوت dll هست.

برخی از افرادی که چنین مشکلی داشتند، به جای مسیر C:\Qt\20xx.xx\bin از مسیر C:\Qt\20xx.xx\qt\bin استفاده کردند و مشکل برطرف شد.

baradar
پنج شنبه 06 خرداد 1389, 10:37 صبح
با سلام
از پاسخ شما سپاسگزارم
من یک سوال دیگر نیز داشتم
آیا می شود در محیط Qtcreator برنامه را به صورت STATIC ساخت که دیگر احتیاجی به Dll هایی مانند mingwm10.dll و libgcc_s_dw2-1.dll نداشته باشد آیا در قسمت option تنظیماتی برای اینکار وجود دارد
با تشکر

Nima_NF
پنج شنبه 06 خرداد 1389, 14:50 عصر
این چند لینک را مطالعه کنید:
http://www.qtcentre.org/wiki/index.php?title=Building_static_applications
http://www.qtcentre.org/wiki/index.php?title=Building_static_Qt_on_Windows
http://doc.trolltech.com/4.6/deployment-windows.html

baradar
جمعه 07 خرداد 1389, 10:41 صبح
با سلام
من تمامی کارهایی که در سه لینک بالا گفته بود انجام دادم ولی هیچ تغییری در فایل اجرایی انجام نشد
لطفا کمی راهنمایی کنید
کارهایی که من انجام دادم
1-نوشتن متن LFLAGS = -static-libgcc
در فایل QTDIR>\qmake\Makefile.win32*

2- نوشتن متن CONFIG += static
در فایل pro پروژه

Nima_NF
یک شنبه 09 خرداد 1389, 13:20 عصر
شما اصلی ترین کار برای کامپایل به شکل static را انجام ندادید. یعنی ابتدا configure و سپس کامپایل کل Qt به شکل static که چند ساعت کامپایل آن طول خواهد کشید.
ناچار شدم برای اینکه دقیق مراحل را بنویسم، خود یک مرتبه روی سیستم جدیدم مراحل را انجام بدم و چند ساعتی کامپایل کنم!

پس طی مراحل زیر باید بروید:
1- برای از بین بردن وابستگی ها به mingwm10.dll یا libgcc_s_dw2-1.dll باید مورد زیر ر انجام دهید (یعنی اضافه کردن -static -static-libgcc به فایل mkspecs\win32-g++\qmake.conf )
از طریق مطالعه این لینک (http://www.qtcentre.org/wiki/index.php?title=Building_static_Qt_on_Windows_with _MinGW)

2- برای تنظیم و کامپایل کتابخانه به شکل static، در command prompt به مسیر نصب Qt بروید و ابتدا configure و سپس nmake یا mingw32-make که حتی تا چند ساعت طول خواهد کشید.



cd C:\Qt\2009.02\qt
configure -static -release -no-exceptions

سپس کامپایل وساخت static کل کتابخانه:



mingw32-make sub-src



اگر در آینده قصد داشتید از حالت static استفاده نکنید، فقط خط اول و دوم کافیست، ابتدا دستور زیر را اجرا کنید، سپس configure جدید در حالت -shared را اجرا کنید که دقایق یا ساعاتی طول خواهد کشید.



nmake distclean
configure -shared -release -no-exceptions

3- در ویندوز به کار دیگری نیاز ندارید، با QtCreator کامپایل کنید، کتابخانه ها به شکل static اضافه می شوند.
فقط تاجایی که می دانم در لینوکس یا کلا پلتفرم های X11 شما باید در فایل .pro پروژه کد زیر را اضافه کنید:



CONFIG += staticlib

eshpilen
جمعه 14 خرداد 1389, 10:20 صبح
معمولا به خاطر استفاده از نسخه های متفاوت dll هست.

برخی از افرادی که چنین مشکلی داشتند، به جای مسیر C:\Qt\20xx.xx\bin از مسیر C:\Qt\20xx.xx\qt\bin استفاده کردند و مشکل برطرف شد.
کتابخانه هایی که در C:\Qt\20xx.xx\bin هست مربوط به برنامه های خود پکیج Qt SDK مثل QtCreator میشه.
QtCreator خودش با کیوت نوشته شده اما از کتابخانه های Qt ای استفاده میکنه که با نسخه های استاندارد مورد استفادهء عموم فرق میکنن (احتمالا سفارشی شدن و غیره).
بنابراین کاربر با C:\Qt\20xx.xx\bin کاری نداره چون این کتابخانه ها فقط برای خود برنامهء QtCreator هستن و برنامه های کاربر با کتابخانه های نسخه هایی که در مسیر دوم هست کامپایل میشن.

mosi20
سه شنبه 26 مرداد 1389, 00:18 صبح
سلام
منم همین چیزی که شما گفتید را انجام دادم ولی موقع کامپایل qt بعد از ۱ ساعت نوشت exit with error 1 و نفهمیدم چی نوشته دقیق
باید چی بنویسه؟
اینا نوشت :

c:\Qt\2010.04\qt\lib\libQtGui.a(qapplication.o):qa pplication.cpp:(.text+0x358a):
undefined reference to `_imp___Z21qt_call_post_routinesv'
c:\Qt\2010.04\qt\lib\libQtGui.a(qapplication.o):qa pplication.cpp:(.text+0x3b2f):
undefined reference to `_imp___Z21qt_call_post_routinesv'
c:\Qt\2010.04\qt\lib\libQtGui.a(qapplication.o):qa pplication.cpp:(.text+0x40ca):
undefined reference to `_imp___Z21qt_call_post_routinesv'
c:\Qt\2010.04\qt\lib\libQtGui.a(qwhatsthis.o):qwha tsthis.cpp:(.text+0x15c): unde
fined reference to `_imp___Z21qDeleteInEventHandlerP7QObject'
collect2: ld returned 1 exit status
mingw32-make[2]: *** [..\..\..\bin\uic3.exe] Error 1
mingw32-make[2]: Leaving directory `C:/Qt/2010.04/qt/src/tools/uic3'
mingw32-make[1]: *** [release] Error 2
mingw32-make[1]: Leaving directory `C:/Qt/2010.04/qt/src/tools/uic3'
mingw32-make: *** [sub-uic3-sub_src_target_ordered] Error 2

C:\Qt\2010.04\qt>
الان هم هرچی میخوام کدم را کامپایل کنم اررور میده



debug\qrc_resources.cpp
g++ -static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,windows -o debug\project.exe object_script.project.Debug -L"c:\Qt\2010.04\qt\lib" -lmingw32 -lqtmaind -lQtScriptd -lQtSqld -lQtXmld -lQtGuid -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCored -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
c:/qt/2010.04/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lQtScriptd
collect2: ld returned 1 exit status
mingw32-make[1]: Leaving directory `W:/code-project/C++‎/sms'
mingw32-make: Leaving directory `W:/code-project/C++‎/sms'
mingw32-make[1]: *** [debug\project.exe] Error 1
mingw32-make: *** [debug] Error 2
The process "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" exited with code %2.
Error while building project project (target: Desktop)
When executing build step 'Make'

mosi20
سه شنبه 26 مرداد 1389, 02:43 صبح
یک چیزی پیدا کردم مثل اینکه این مشکل در qt 4.6.3 هست !که منم دقیقا همین ورژن را دارم
http://www.qtcentre.org/threads/31684-Problems-creating-Qt-4.6.3-static-with-MinGw
حالا دارم 4.7 beta را دانلود میکنم
امیدوارم مشکلم حل بشه

mosi20
چهارشنبه 27 مرداد 1389, 12:49 عصر
مشکل حل نشد.
توروخدا یک نفر کمک کنه

Stanford
چهارشنبه 25 بهمن 1391, 23:24 عصر
فقط از نسخه 4.7 qt برای کامپایل static استفاده کنید و برای کامپایل جهت افزایش سرعت و استفاده از تمام توان هسته های CPU از jom استفاده کنید. از نسخه 5.0.0 به بالا تست نکردم ولی 5.0.0 و 4.8.4 بدرستی کامپایل نمی شوند.