Автор Тема: Вграждане на библиотеки във изпълним файл на Qt4  (Прочетена 2596 пъти)

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Добър вечер.

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

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

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
@LinuxFanUNIX: Чрез статично компилиране. Но имай предвид, че трябва да прекомпилираш Qt библиотеката със -static опция, за да се продуцират съответните .a файлове.
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Така. В момента компилирам, обаче имам един въпрос - пак ли посъщия начин се include-ват файловете, или...?

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

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
То няма друг начин за инклудване освен с #include <> или #include ""
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
То няма друг начин за инклудване освен с #include <> или #include ""
Ми може и да има и друг начин :)

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

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Опа... При опит да изпълня приложението връща Segmentation fault  ;D
Тъй като в това обяснение има доста логика и описва добре проблема - може ли малко помощ. :)

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

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
@LinuxFanUNIX: Най-грубо казано пипаш неща в паметта, които не би трябвало да може да пипаш. Тоест това не е проблем на статичната компилация. Опитай се да разбереш къде точно гърми програмата и виж кои указатели не са инициализирани.
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Няколко неща може да са се объркали:

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

Успех  [_]3
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Може би за пореден път се убеждавам че Qt4 е може би най-нестабилния език на който на който съм писал. Махнах static-а тъй като при него всичко си беше Segmentation fault. Сложих си версия 4.4.1 който допреди няколко часа си вървеше перфектно, обаче пак - та*ак. Всички Qt4 програми вървят, моите естествено - не. Всичко си ми е наред, обаче нали трябва да се издразни с мене. Вече стана 2 пъти пренаписвам една и съща програма, и накрая, след всички тези безсънни нощи - хоп, не става. Пък може и за всичко да е виновно и тъпото IDE - QtCreator... :(

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

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
И един въпрос:

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

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

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
@LinuxFanUNIX: Qt4 не е език, а библиотека. Това, което се бъзика с теб, е C++. Така че и на Qt3 и на GTK да минаваш, то крайният резултат няма да е много по-различен.

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

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
@LinuxFanUNIX: Qt4 не е език, а библиотека. Това, което се бъзика с теб, е C++. Така че и на Qt3 и на GTK да минаваш, то крайният резултат няма да е много по-различен.

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

2. Ще пробвам с Debuger-а ;)
Активен

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
Да, това ми е ясно че е от самото C++, но въпросът ми беше друг - примерно ако съм с Qt4 библиотеката, обаче примерно под Python или Perl, тогава би трябвало всичко да е перфектно. :)
Съмнявам се. Най-вероятно ще получиш по-информативно съобщение за грешката.
Активен