Qt, libfcgi и многопоточность

Для создания приложений на есть библиотека libfcgi. Не буду вдаваться в дискуссию, зачем нужны приложения FastCGI на C/C++/подставить нужный язык, когда Python/PHP/Perl/подставить нужное гораздо удобнее. Отмечу лишь, что по работе понадобилось написать FastCGI-приложение на (в основном из-за наличия нескольких высокопроизводительных библиотек, написанных на , но не суть).

Строго говоря, libfcgi, хотя и является официальной библиотекой от создателей протокола, не лучший вариант для поддержки FastCGI — API, предоставляемое библиотекой, сильно ограничено (в плане функциональности) и недостаточно гибко. Далее »

Автор: , опубликовано в: Qt, комментариев: 2
8
Янв
2012

HTML Parser для Qt

 — это, конечно, хорошо, но очень часто требуется разбирать документы , которые могут и не быть валидными.

В есть множество классов для работы с XML, но они не подходят для HTML, так как ошибки в HTML для них фатальны.

Ниже приведён вариант парсера для HTML, основанный на библиотеке libxml2. Далее »

Автор: , опубликовано в: Qt, комментариев: 4
7
Сен
2011

Пример рабочей реализации QDomDocument::elementById

Так сложилось, что в реализация метода QDomDocument::elementById() нерабочая: при попытке использования данного метода выдаётся предупреждение elementById() is not implemented and will always return a null node и возвращается пустой элемент .

Временами это очень неудобно: например, вместо использования из QXmlPatterns может быть проще получить элемент DOM по его id и пройтись по его потомкам. А при использовании XPath функцию id() использовать не получится в силу тех же причин. Далее »

Автор: , опубликовано в: Qt, комментариев: 4
19
Мар
2011

Cannot mix incompatible Qt libraries

В последнее время на разных я стал довольно часто сталкиваться с ошибкой

[-]
View Code (Unknown Language)
Cannot mix incompatible Qt libraries

Очень сильно этим грешит Skype. Но в последнее время такая проблема стала возникать для приложений KDE4.

Данная ошибка, как правило, вызывается одной из следующих причин:

  1. В системе установлены библиотеки разных версий. Проверяется это очень просто:
    [-]
    View Code Bash
     dpkg -l | grep qt | grep -r "^[ih]"

    Если в выдаче присутствуют библиотеки разных версий (третья колонка), значит, именно это вызвало проблему. Удаление старых библиотек, как правило, решает проблему.

    В этом случае, например, конфликта нет:

    [-]
    View Code (Unknown Language)
    ii  libqt4-dbus                                 4.4.2-0ubuntu2                        Qt 4 D-Bus module
    ii  libqt4-designer                             4.4.2-0ubuntu2                        Qt 4 designer module
    ii  libqt4-network                              4.4.2-0ubuntu2                        Qt 4 network module
    ii  libqt4-opengl                               4.4.2-0ubuntu2                        Qt 4 OpenGL module
    ii  libqt4-qt3support                           4.4.2-0ubuntu2                        Qt 3 compatibility library for Qt 4
    ii  libqt4-script                               4.4.2-0ubuntu2                        Qt 4 script module
    ii  libqt4-sql                                  4.4.2-0ubuntu2                        Qt 4 SQL module
    ii  libqt4-svg                                  4.4.2-0ubuntu2                        Qt 4 SVG module
    ii  libqt4-xml                                  4.4.2-0ubuntu2                        Qt 4 XML module
    ii  libqtcore4                                  4.4.2-0ubuntu2                        Qt 4 core module
    ii  libqtgui4                                   4.4.2-0ubuntu2                        Qt 4 GUI module
    ii  libstrigiqtdbusclient0                      0.5.11-1                              library for writing D-Bus clients for Strigi Desktop Se
    ii  qt4-qtconfig                                4.4.2-0ubuntu2                        Qt 4 configuration tool
    Тем не менее, если ошибка всё еще выдаётся, переходим к пункту 2.
  2. Если используется 64-битная платформа, проблема может возникать из-за того, что загрузчик пытается использовать 32-битные библиотеки. Определить это можно при помощи ldd.

    Например,

    [-]
    View Code Bash
    ldd /usr/bin/ktorrent | grep '/lib32/'
    #   libQtDBus.so.4 => /lib32/libQtDBus.so.4 (0x00007f191cce7000)

    В данном случае при загрузке libQtDBus загрузчик будет загружать её 32-битную версию (из /lib32) вместо 64-битной (из /lib).

    Я использую следующее решение (оно не идеальное, но работает):

    [-]
    View Code Bash
    sudo -i
    echo /lib32 > /etc/ld.so.conf.d/libQtDBus32.conf
    echo /usr/lib > /etc/ld.so.conf.d/libQtDBus64.conf
    ldconfig
  3. Наконец, если подобная проблема возникает при использовании на 64-битной платформе, то проще всего скачать static version. Очень сильно экономит нервы :-)
Автор: , опубликовано в: Linux, комментариев: 2
1
Окт
2008