Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: LinuxFanUNIX в May 03, 2009, 23:10



Титла: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: LinuxFanUNIX в May 03, 2009, 23:10
Добър вечер.

Искам да ви попитам как мога да вградя библиотеки на Qt4 програма във изпълнимия файл, така че, потребителя дори и да няма инсталирани Qt4 библиотеките, да може да пусне библиотеките?

Благодаря предварително!


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: dvasilev в May 04, 2009, 09:18
@LinuxFanUNIX: Чрез статично компилиране. Но имай предвид, че трябва да прекомпилираш Qt библиотеката със -static опция, за да се продуцират съответните .a файлове.


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: task_struct в May 04, 2009, 09:27
Виж и това: http://chrishowells.co.uk/?p=239


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: LinuxFanUNIX в May 04, 2009, 19:30
Така. В момента компилирам, обаче имам един въпрос - пак ли посъщия начин се include-ват файловете, или...?

Благодаря предварително!


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: task_struct в May 04, 2009, 21:10
То няма друг начин за инклудване освен с #include <> или #include ""


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: LinuxFanUNIX в May 04, 2009, 21:17
То няма друг начин за инклудване освен с #include <> или #include ""
Ми може и да има и друг начин :)

Например вместо стандартното QLabel да речем, да се копира qlabel.h или qlabel.a в руута на проекта и тогава да се вгражда. Знам ли.  :)


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: LinuxFanUNIX в May 05, 2009, 19:28
Опа... При опит да изпълня приложението връща Segmentation fault  ;D
Тъй като в това обяснение има доста логика и описва добре проблема - може ли малко помощ. :)

Благодаря предварително!


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: dvasilev в May 05, 2009, 19:44
@LinuxFanUNIX: Най-грубо казано пипаш неща в паметта, които не би трябвало да може да пипаш. Тоест това не е проблем на статичната компилация. Опитай се да разбереш къде точно гърми програмата и виж кои указатели не са инициализирани.


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: task_struct в May 05, 2009, 19:57
Няколко неща може да са се объркали:

1) Някой обект не се заделя и при опит да се обърнеш към него гърми с Segmentation fault (малко вероятно при съвременните компютри, но все пак можеш да сложиш проверка дали оектите се заделят правилно)
2) Освобождаваш с delete 2 пъти 1 обект. Решение: Прегледай си кода, пусни го през дебъгер.
3) Поради спецификата на сигналите и слотовете в Qt може да се получава следното: Освобождаваш обект, към който все още има неизпълнени ивънти, който главният ивънт лууп се мъчи да изпълни. За да се избегне това, обектите, в който се съмняваш, че може да причинят този проблем освобождавай с void QObject::deleteLater () За повече информация: http://doc.trolltech.com/4.5/qobject.html#deleteLater

Успех  [_]3


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: LinuxFanUNIX в May 05, 2009, 22:21
Може би за пореден път се убеждавам че Qt4 е може би най-нестабилния език на който на който съм писал. Махнах static-а тъй като при него всичко си беше Segmentation fault. Сложих си версия 4.4.1 който допреди няколко часа си вървеше перфектно, обаче пак - та*ак. Всички Qt4 програми вървят, моите естествено - не. Всичко си ми е наред, обаче нали трябва да се издразни с мене. Вече стана 2 пъти пренаписвам една и съща програма, и накрая, след всички тези безсънни нощи - хоп, не става. Пък може и за всичко да е виновно и тъпото IDE - QtCreator... :(

Абе ще се минава май на Qt3 ама да видим... :(


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: LinuxFanUNIX в May 05, 2009, 22:54
И един въпрос:

Segmenrtation fault (гадната грешка която никога не казва къде грешиш), появява ли се при скриптовия Qt4 (примерно Python+Qt4, PHP+Qt4) ?

Благодаря предварително!


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: dvasilev в May 06, 2009, 01:03
@LinuxFanUNIX: Qt4 не е език, а библиотека. Това, което се бъзика с теб, е C++. Така че и на Qt3 и на GTK да минаваш, то крайният резултат няма да е много по-различен.

Съвсем нормално е програмата да не тръгне от първия път и да ти дава такива грешки. След като ползваш Qt Creator, не виждам какъв е проблема да компилираш програмата в debug режим, да набиеш един breakpoint около мястото където гърми, изпълнявайки ред по ред изходния код да видиш кое точно прецаква работата и след като го откриеш и помислиш какво не е наред, да си оправиш грешката. Вярно, че не е тривиална процедурата, но то без усилия не стават работите.


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: LinuxFanUNIX в May 06, 2009, 02:22
@LinuxFanUNIX: Qt4 не е език, а библиотека. Това, което се бъзика с теб, е C++. Така че и на Qt3 и на GTK да минаваш, то крайният резултат няма да е много по-различен.

Съвсем нормално е програмата да не тръгне от първия път и да ти дава такива грешки. След като ползваш Qt Creator, не виждам какъв е проблема да компилираш програмата в debug режим, да набиеш един breakpoint около мястото където гърми, изпълнявайки ред по ред изходния код да видиш кое точно прецаква работата и след като го откриеш и помислиш какво не е наред, да си оправиш грешката. Вярно, че не е тривиална процедурата, но то без усилия не стават работите.
1. Да, това ми е ясно че е от самото C++, но въпросът ми беше друг - примерно ако съм с Qt4 библиотеката, обаче примерно под Python или Perl, тогава би трябвало всичко да е перфектно. :)

2. Ще пробвам с Debuger-а ;)


Титла: Re: Вграждане на библиотеки във изпълним файл на Qt4
Публикувано от: dvasilev в May 06, 2009, 08:38
Да, това ми е ясно че е от самото C++, но въпросът ми беше друг - примерно ако съм с Qt4 библиотеката, обаче примерно под Python или Perl, тогава би трябвало всичко да е перфектно. :)
Съмнявам се. Най-вероятно ще получиш по-информативно съобщение за грешката.