| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt4]сборка драйвера для PostgreSQL |
| Автор: LazyVoid 1.3.2008, 01:38 | ||
| Доброго здравия. Вот уже 5 дней пытаюсь собрать драйвер для постгрес, но никакого толка не выходит. Не справившись с проблемой самостоятельно, надеюсь на вашу помощь, господа форумчане. О компонентах: 1) WindowsXP SP2; 2) qt-win-opensource-src-4.3.3.zip 3) postgresql-8.3.0-1.zip 4) MinGW-3.4.2.exe 5) mingw-utils-0.3.tar.gz Переменные среды: PATH = C:\MinGW\bin;C:\Qt\4.3.3\bin;C:\PostgreSQL\bin INCLUDE = C:\PostgreSQL\include LIB = C:\PostgreSQL\lib QTDIR = C:\Qt\4.3.3 QMAKESPECS = win32-g++ configure.bat:
Действия: Руководствуясь http://projects.org.ua/forum.phpbb2ru/viewtopic.php?p=4381&sid=5f92228ea8c9fc0fe7467ce0265480b7 переделал libpq.lib в lib.a следующим образом: reimp -d libpq.lib скопировал из директории PostgreSQL\bin в ..\lib libpq.dll убрал подчеркивания в LIBPQ.DEF dlltool --input-def libpq.def --dllname libpq.dll --output-lib libpq.a --kill-at Далее собрал Qt приведенным выше батником, все прошло успешно, но: 1) Драйвер не отображается для приложений 2) Не запускается sqlbrowser через qdemo 3) При запуске вручную из папки вылетает следующая ошибка: Порядковый номер 284 не найден в библиотеке DLL SSLEAY32.dll При проверке Dependency Walker'ом sqlbrowser.exe получены следующие сообщения: Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module. Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module. В общем дело сводится к тому что он ругается на MPR.dll, WNetRestoreConnectionA помечена красным. Но я где то читал что на это не надо обращать внимания т.к. это вроде dw гонит. Надеюсь проблему изложил верно, жду комментариев и помощи, заранее благодарен всем. P.S. также компилил как плагин, пробовал на бинарной версии Qt но бестолку (: |
| Автор: SABROG 1.3.2008, 02:41 | ||
Это либа от OpenSSL. Нафиг делать reimp, когда Postgre прекрасно собирается мингвой не понимаю, если собирать отстоем в виде MSVC, то да. Мой совет, хочешь Слона собирай и линкуй его к Qt своими силами, плюнь на плагины, как показывает опыт они бажные по самое не балуй. Взять хотябы последний WebKit, крашится хоть на Win2000, хоть на WinXP. И вообще чем больше вникаю в Qt, тем больше понимаю, что оно глючное, но это лучшая альтернатива. |
| Автор: LazyVoid 1.3.2008, 02:52 | ||||
Может я плохо выразился. Смысл в том что я поставил Постгрес из бинарника, а reimp делал для того чтобы мингв получил либу для сборики драйвера, т.к. он вроде как не понимает либы *.lib, вот и делал *.а
поподробнее бы расписали |
| Автор: SABROG 1.3.2008, 12:50 | ||||
- качаем исходники слона - качаем исходники openssl - компилим openssl мингвой - конфигурим исходники слона включая поддержку опенссл, прописываем директории до ходиреов и .a файлов - компилим слона мингвой - открываем .pro файл своего проекта и добавляем путь для поисков иклудов: INCLUDEPATH += путь_до_инклудов_слона LIBS += -Lпуть_где_искать_.a_файлы_слона -lимя_линкуемого.a_файла - открываем исходники и прописываем иклуд: #include "libpq-fe.h" - пишем свой код для работы с базой данных:
И т.д., это уже в доки по слону. |
| Автор: Любитель 2.3.2008, 00:39 |
| Да всё там как таковое работает нормально. И под виндой, и под линем. Конкретно с постгрисом - под виндой не собирал. Могу попробовать - думаю это возможно, причём без пересборки постгриса. Вообще, его бинарные виндовые дистры разве не через МинГВ собраны? |
| Автор: SABROG 2.3.2008, 01:47 |
| Ага, настолько нормально, что сам Qt не может быть собран с оптимизацией -O3 и с поддержкой SSE2 без крашей приложений, а QWebKit крашится на ровном месте. Стили отличные от стандартного windows лагают не по детски на сильной тачке. А при простом движении мышки над контролами Qt приложение в таскбаре при этом жрет 99% процессорного времени. Я понимаю, что ничто не идеально и тот же Delphi глюканутый по самые помидоры, но и плагины баз данных Qt не панацея, куда правильней писать независимый код, особенно, если проекты типа PostgreSQL кроссплатформенные и их можно использовать не только в Qt. Плагины баз данных Qt ограничивают возможность использовать другие функции, которые предоставляет библиотека. Например почти для всех баз данных есть функция экранирования запроса, чтобы избежать SQL Injection, в классе QSqlQuery этой функции нету, хотя и могла бы быть. И приходится писать свои аналоги, несмотря на то, что библиотеки уже имеют эту функцию и распространяются с твоей программой. В итоге имеем программу, где одни и те же функции реализованы по 100 раз только потому, что удобно привести все к одной схеме, под одну гребенку. |
| Автор: JackYF 2.3.2008, 14:40 | ||||||
Пруфлинк? И вообще, нет - ну и фиг с ним - мало что теряем.
Омф, никогда такого не видел.
Согласен, недостаток. Напиши им в wishlist. По информации от nickless QSqlQuery::bindValue делает то, что надо. |
| Автор: nickless 2.3.2008, 18:23 | ||||||||||||
Даа? Долго пробовал заинжектить чего-нибудь в базу данных амарок-а, не получилось:
Пишет -1 rows affected. Вот так
автоматически экранирует ' Даже вот так:
Выдаёт
А зачем использовать агрессивную оптимизацию? С ней вообще половина приложений падает, это и так известно. С -О2 у меня прекрасно работает, правда на винде не пробовал, там еще mingw и сама винда может проблемы создаёт. Добавлено через 1 минуту и 17 секунд ЗЫ, база данных = QMYSQL |
| Автор: LazyVoid 2.3.2008, 23:43 |
Всем принявшим участие спасибо! Отдельное спасибо SABROG'у, который навел на решение проблемы. Проблема была решена самостоятельной сборкой OpenSSL и PostgreSQL, после которых драйвер заработал сам. P.S. тем не менее решил не юзать кутишные возможности для работы с базой, а делать через стандартные интерфейсы, опять же спасибо (или нет, время покажет ;) ) товарищу SABROG'у P.P.S. +1 |
| Автор: JackYF 3.3.2008, 15:18 |
выполнено. |