Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT]Подключение к PostgreSQL, Проблема сборки проекта psql.pro 
V
    Опции темы
A3B2C1
Дата 7.7.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Здравствуйте.
Помогите разобратся в ситуации. Под Windows пытаюсь соединится с БД PostgreSQL средствами Qt4. При подключении к БД PostgreSQL приложение "зависает".
Проект приложения был откомпилирован и собран. Если устанавливать контрольные точки
breakpoints в строке, отвечающей за соединение с базой данных и последующей, то в первую breakpoint программа попадает, а во вторую нет. Такое ощущение, что программа, должна подсоединится к dll, а не может её найти. Поискав в интернете, я нашёл, что такая dll называется qsqlpsql.dll и получается она путём сборки проекта psql.pro из каталога:
C:\Qt\4.3.4\src\plugins\sqldrivers\psql. При попытке собрать проект получаю:
"..\..\..\sql\drivers\psql\qsql_psql.cpp:57:22: libpq-fe.h: No such file or directory"
и сообщения об ошибках, состоящих в том, что функции, используемые в прогамме, не найдены. По поиску на компьютере, файла с названием libpq-fe.h я не нашёл, но нашёл файл "C:\Windows\system32\libpg.dll" Может кто либо подскажет, чего не хватает для соединения с БД?


PM MAIL   Вверх
SABROG
Дата 7.7.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Этот файл относится к исходникам Слона, если память не изменяет его подключают к модулю при использовании функций PostgreSQL. В инклюдах скорее всего забыл прописать путь к собраным исходникам Слона.

А еще ридми полезно читать в той же папке:

Код

You will need the PostgreSQL development headers and libraries installed
before compiling this plugin.

See the Qt SQL documentation for more information on compiling Qt SQL
driver plugins (sql-driver.html).



Это сообщение отредактировал(а) SABROG - 7.7.2008, 12:39


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
A3B2C1
Дата 7.7.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Спасибо за пояснения.
При попытке осуществить установку плагинов согласно "sql-driver.html":
Код

     qmake -o Makefile "INCLUDEPATH+=C:\psql\include" "LIBS+=C:\psql\lib\ms\libpq.lib" psql.pro
     nmake

 из командной строки - ничего не получилось, хотя я заменил "C:\psql" на путь, куда у меня установлен PostgreSQL.

Попытался собрать исходники:
Снова натолкнулся снова на проблемы:
"cannot find -lpq"
Файла pq.dll по поиску на своём компьятере я не нашёл, но нашёл файл "C:\WINDOWS\system32\libpq.dll".
Я его скопировал в папку, где располагается psql.pro, и заменил сам psql.pro с
Код

...
win32 {
 !contains(LIBS, .*pq.* ) {
  !win32-g++ {
   LIBS *=    -llibpq
  }
  win32-g++ {
   LIBS *=    -lpq
  }
  LIBS *=   -lws2_32   -ladvapi32
 }
 include(../qsqldriverbase.pri)
}
...


на
Код

...
win32 {
   LIBS *=    -llibpq
   include(../qsqldriverbase.pri)
}

...


Снова получил аналогичное:
"cannot find -llibpq"

Буду признателен если чего подскажет кто.
PM MAIL   Вверх
JackYF
Дата 7.7.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(A3B2C1 @  7.7.2008,  13:32 Найти цитируемый пост)
cannot find -llibpq

а если "-lpq" ?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
A3B2C1
Дата 7.7.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Из книжки М.Шлее прочитал, что для того чтобы использовать библиотеку my_dyn_lib,
необходимо в pro файле прописать LIBS += -lmy_dyn_lib. Этим подключается библиотека my_din_lib. При этом библиотека загружается при запуске использующей её программы.
Да, там ещё надо указать каталог заголовочных файлов в секции INCLUDEPATH. Но откуда этот каталог взять, если есть только голая библиотека dll?

Добавлено через 3 минуты и 38 секунд
JackYF: грубо говоря - если используем pq.dll - получаем "cannot find -lpq"
                                             - если используем libpq.dll - получаем "cannot find -llibpq"
PM MAIL   Вверх
SABROG
Дата 7.7.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Должен быть файл libpq.lib, если его нет, значит PostgreSQL установлен как-то не так или просто путь не верный.

Цитата(JackYF @  7.7.2008,  14:48 Найти цитируемый пост)
а если "-lpq" ? 

Точно не уверен, но имхо фишка с преобразованием "pq" в "libpq" чисто gccшная.

P.S.: dllки никогда не линковались к программе, линкуются .lib и .a файлы.

Это сообщение отредактировал(а) SABROG - 7.7.2008, 15:10


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
A3B2C1
Дата 7.7.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Файла libpq.lib нет. Его случайно нельзя сделать из libpq.dll? А если переустанавливать, то какие настройки должны быть, чтобы этот файл всё таки бы организовался?
PM MAIL   Вверх
GRONN
Дата 7.7.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 8.3.2007

Репутация: нет
Всего: нет



Если нет libpq.lib (%PSQLDIR%/lib) - непорядок. А Вы указали при установке БД опцию установки include файлов и файлов библиотек? Должен  появиться libpq.lib, после чего можно будет уже собирать проект, используя этот файл. Может повылезать куча ошибок линковки (тогда придется шаманить чтобы из lib и dll сделать a-файл), но, насколько я понял, это уже другая история =)

Поправьте если неправ, я сам только недавно с этим разобрался вроде...
С уважением, Алексей
PM MAIL   Вверх
SABROG
Дата 7.7.2008, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(A3B2C1 @  7.7.2008,  14:32 Найти цитируемый пост)
cannot find -llibpq


Вообще странно то, что в мелкософтовский link'ер должен передаваться явно gccшный ключ -l.
Qt не для mingw случаем ? А еще пробелов не должно быть в пути к библиотекам.


Это сообщение отредактировал(а) SABROG - 7.7.2008, 15:51


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
A3B2C1
Дата 8.7.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Для SABROG: Да действительно Qt для MinGW. 
Для CRONN: Взял другой установщик PostgreSQL, переустановил. Получил файл libpq.lib. Выполнил предписание справочной ситемы для установки plugin: 
Код

     qmake -o Makefile "INCLUDEPATH+=C:\psql\include" "LIBS+=C:\psql\lib\ms\libpq.lib" psql.pro
     nmake 

Правда файла nmake я не нашёл. Использовал вместо него make.bat.
Получил файл qsqlpsql4.dll.
Скопировал его в каталог где находится файл pro для соединения с БД. 
Прописал в файле pro:
Код

LIBS += -lqsqlpsql4
INCLUDEPATH += C:\Qt\4.3.4\plugins\sqldrivers
 
, где "C:\Qt\4.3.4\plugins\sqldrivers" - место где находится qsql_psql.h.
Начал пересобирать проект. Получил знакомое "cannot find -lqsqlpsql4"
Может я чего не понимаю?
PM MAIL   Вверх
SABROG
Дата 8.7.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Если Qt под Mingw, то про nmake и .lib файлы надо забыть. Что надо сделать:
- собрать PostgreSQL с помощью mingw

собирать драйвер как для юникса:
Код

         cd $QTDIR/src/plugins/sqldrivers/psql
         qmake -o Makefile "INCLUDEPATH+=/usr/include/pgsql" "LIBS+=-L/usr/lib -lpq" psql.pro
         make


Только пути указать виндовые.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
A3B2C1
Дата 8.7.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Для SABROG: Нечто подобное я уже проделал. 
Демо проект из Qt подключается к PostgreSQL (правда при запуске не из под debug ). Однако в своём проекте мне подключиться не удаётся.
 smile 
PM MAIL   Вверх
Любитель
Дата 8.7.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(A3B2C1 @  8.7.2008,  10:30 Найти цитируемый пост)
Скопировал его в каталог где находится файл pro для соединения с БД. 
Прописал в файле pro:

А зачем это всё? Если плагин собрался нормально - то его подгрузкой занимается сама Qt. И ещё - я так и не понял, что за make.bat? Что за компилер?


--------------------
PM MAIL ICQ Skype   Вверх
A3B2C1
Дата 8.7.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Вот что написано в make.bat:
Код

@echo off
mingw32-make %*

Ну пускай подгрузкой занимается сама Qt. Тогда почему в одном случае (demos) выстраивается список из одного количества драйверов по вызову
Код

    QStringList drivers = QSqlDatabase::drivers();

    // remove compat names
    drivers.removeAll("QMYSQL3");
    drivers.removeAll("QOCI8");
    drivers.removeAll("QODBC3");
    drivers.removeAll("QPSQL7");
    drivers.removeAll("QTDS7");

    if (!drivers.contains("QSQLITE"))
        ui.dbCheckBox->setEnabled(false);

    ui.comboDriver->addItems(drivers);

а в другом проекте по вызову аналогичного
Код

    QStringList drivers = QSqlDatabase::drivers();
    comboDriver->addItems(drivers);

из комбобокса вываливается другой список, в котором QPSQL не присутствует?
PM MAIL   Вверх
Любитель
Дата 8.7.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



1. Где находится твоя длл-ка с плагином?
2. Покажи текст проектов и сами *.pro-файлы.


--------------------
PM MAIL ICQ Skype   Вверх
A3B2C1
Дата 8.7.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Для Любитель 
1. Расположение dll: "C:\Qt\4.3.4\plugins\sqldrivers\qsqlpsql4.dll" 
Правда для того проекта который не отображает QPSQL она ещё скопирована в каталог где файл pro
2. Текст файлов pro для demo: 
Код

TEMPLATE = app
TARGET = sqlbrowser
QT += sql
HEADERS = browser.h connectionwidget.h qsqlconnectiondialog.h
SOURCES = main.cpp browser.cpp connectionwidget.cpp qsqlconnectiondialog.cpp
FORMS = browserwidget.ui qsqlconnectiondialog.ui
build_all {
 !build_pass {
  CONFIG -=   build_all
 }
 CONFIG +=  release
}
target.path = $$[QT_INSTALL_DEMOS]/sqlbrowser
sources.files = $$SOURCES $$HEADERS $$FORMS *.pro
sources.path = $$[QT_INSTALL_DEMOS]/sqlbrowser
INSTALLS += target sources
CONFIG += build_all debug_and_release qt

Текст файлов pro для того проекта который не отображает QPSQL:
Код

TEMPLATE = app
QT = gui core
QT += sql
CONFIG += qt warn_on console debug_and_release
DESTDIR = bin
OBJECTS_DIR = build
MOC_DIR = build
UI_DIR = build
FORMS = ui/mainwindow.ui
HEADERS = src/mainwindowimpl.h
SOURCES = src/mainwindowimpl.cpp src/main.cpp


Что вы понимаете под текстами проектов?
PM MAIL   Вверх
A3B2C1
Дата 8.7.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Для Любитель

длл-ка с плагином находится в "C:\Qt\4.3.4\plugins\sqldrivers\qsqlpsql4.dll"

*pro - файлы (успешное соединение):
Код

TEMPLATE = app
TARGET = sqlbrowser
QT += sql
HEADERS = browser.h connectionwidget.h qsqlconnectiondialog.h
SOURCES = main.cpp browser.cpp connectionwidget.cpp qsqlconnectiondialog.cpp
FORMS = browserwidget.ui qsqlconnectiondialog.ui
build_all {
 !build_pass {
  CONFIG -=   build_all
 }
 CONFIG +=  release
}
target.path = $$[QT_INSTALL_DEMOS]/sqlbrowser
sources.files = $$SOURCES $$HEADERS $$FORMS *.pro
sources.path = $$[QT_INSTALL_DEMOS]/sqlbrowser
INSTALLS += target sources
CONFIG += build_all debug_and_release qt



не успешное соединение (нет драйвера PQSQL):
Код

TEMPLATE = app
QT = gui core
QT += sql
CONFIG += qt warn_on console debug_and_release
DESTDIR = bin
OBJECTS_DIR = build
MOC_DIR = build
UI_DIR = build
FORMS = ui/mainwindow.ui
HEADERS = src/mainwindowimpl.h
SOURCES = src/mainwindowimpl.cpp src/main.cpp


PM MAIL   Вверх
A3B2C1
Дата 9.7.2008, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



Всем доброго дня.
Если IDE QDevelop установить в меню Проект->Свойства (назв.пр.) в закладке "конфигурация" в секции "версия" выбрать "release", то драйвер PQSQL находится. Не знаю чем это объясняется, но заработало.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1355 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.