Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ QT4.6 +PostgreQAL

Автор: mettamo 2.6.2010, 11:12

Здравствуйте не получается скомпилить драйвер
/usr/include/postgresql - сдесь находятся заголовочники
/home/artem/qtsdk-2010.02/qt/src/plugins/sqldrivers/psql - плагин

пробовал так
qmake-qt4 -o Makefile "INCLUDEPATH+=/usr/include/postgresql" "LIBS+=/usr/include/postgresql/8.4/server/libpq/libpq.h" psql.pro
потом так
qmake-qt4 -o Makefile "INCLUDEPATH+=/usr/include/postgresql/8.4/server/libpql" "LIBS+=/usr/include/postgresql/8.4/server/libpq/libpq.h" psql.pro
много вариантов перепробовал чтоб он видел заголовочники

постоянно выдает
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:14:27: error: nodes/pg_list.h: Нет такого файла или каталога
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:15:26: error: libpq/pqcomm.h: Нет такого файла или каталога
In file included from /usr/include/postgresql/8.4/server/libpq/libpq.h:21:
/usr/include/postgresql/8.4/server/libpq/libpq/libpq-be.h:74:52: error: /usr/include/postgresql/8.4/server/utils: Нет такого файла или каталога
In file included from /usr/include/postgresql/8.4/server/libpq/libpq.h:20:
/usr/include/postgresql/8.4/server/libpq/lib/stringinfo.h:108: error: ‘va_list’ has not been declared
In file included from /usr/include/postgresql/8.4/server/libpq/libpq/libpq-be.h:71,
from /usr/include/postgresql/8.4/server/libpq/libpq.h:21:
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:66: error: expected initializer before ‘*’ token
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:71: warning: ‘read_pg_database_line’ initialized and declared ‘extern’
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:71: error: ‘FILE’ was not declared in this scope
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:71: error: ‘fp’ was not declared in this scope
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:71: error: expected primary-expression before ‘char’
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:71: error: ‘Oid’ was not declared in this scope
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:71: error: ‘dboid’ was not declared in this scope
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:72: error: ‘Oid’ was not declared in this scope
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:72: error: ‘dbtablespace’ was not declared in this scope
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:72: error: ‘TransactionId’ was not declared in this scope
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:72: error: ‘dbfrozenxid’ was not declared in this scope
/usr/include/postgresql/8.4/server/libpq/libpq/hba.h:72: error: initializer expression list treated as compound expression
In file included from /usr/include/postgresql/8.4/server/libpq/libpq/libpq-be.h:72,
from /usr/include/postgresql/8.4/server/libpq/libpq.h:21:
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:44: error: redefinition of ‘struct sockaddr_storage’
/usr/include/bits/socket.h:188: error: previous definition of ‘struct sockaddr_storage’
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:65: error: ‘ACCEPT_TYPE_ARG3’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:100: error: ‘uint32’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:102: error: ‘ProtocolVersion’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:111: error: ‘uint32’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:130: error: ‘ProtocolVersion’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:163: error: ‘uint32’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:179: error: ‘MsgType’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:180: error: ‘uint32’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/pqcomm.h:181: error: ‘uint32’ does not name a type
In file included from /usr/include/postgresql/8.4/server/libpq/libpq.h:21:
/usr/include/postgresql/8.4/server/libpq/libpq/libpq-be.h:110: error: ‘ProtocolVersion’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/libpq-be.h:125: error: ISO C++ forbids declaration of ‘List’ with no type
/usr/include/postgresql/8.4/server/libpq/libpq/libpq-be.h:125: error: expected ‘;’ before ‘*’ token
/usr/include/postgresql/8.4/server/libpq/libpq/libpq-be.h:138: error: ‘TimestampTz’ does not name a type
/usr/include/postgresql/8.4/server/libpq/libpq/libpq-be.h:179: error: ‘ProtocolVersion’ does not name a type
make: *** [libqsqlpsql.so] Ошибка 1

смотрел сами заголовочники такое ощущение что папки перемешаны, что делать?

Автор: Litkevich Yuriy 2.6.2010, 15:10

Цитата(mettamo @ 2.6.2010, 15:12) *
LIBS+=/usr/include/postgresql/8.4/server/libpq/libpq.h
в переменную LIBS заносят не заголовочник, а библиотеку

Автор: mettamo 2.6.2010, 19:28

а какую библиотеку?

вроде собрал появился файл libqsqlpsql.so

что дальше как начать работу?

Автор: mettamo 2.6.2010, 20:09

в файле *.pro дописываю
QTPLUGIN += psql

в исходнике
Q_IMPORT_PLUGIN(psql);

пишет при компиляции collect2: ld returned 1 exit status

g++ -Wl,-O1 -o DATABASE main.o mainwindow.o moc_mainwindow.o -L/usr/lib -lQtGui -lQtCore -lpthread
main.o: In function `global constructors keyed to main':
main.cpp:(.text+0x1): undefined reference to `qt_plugin_instance_psql()'
collect2: ld returned 1 exit status
make: *** [DATABASE] Ошибка 1

Автор: Litkevich Yuriy 2.6.2010, 23:37

mettamo, ты что статически Qt собирал?

Автор: mettamo 2.6.2010, 23:55

нет

Автор: Litkevich Yuriy 3.6.2010, 0:04

тогда всё это добро в файле проекта и main.cpp не нужно, оно только для статической сборки.

При работе с модулем SQL в про файл нужно добавить:
Qt += sql
и всё.


Автор: mettamo 3.6.2010, 0:21

QSqlDatabase db;
db.addDatabase("QPSQL", "new");
db.setHostName("localhost");
db.setPort(5432);
db.setDatabaseName("postgres");
db.setUserName("artem");
db.setPassword("qwerty");
bool op=db.open();
if (op)ui->label->setText("true");

я компилю такой код, по идее если подключается то setText("true"); но текст не меняется, как проверить подключилась или нет?

Автор: mettamo 3.6.2010, 6:23

db.lastError().text() пишет, что драйвер не загружен

Автор: Litkevich Yuriy 3.6.2010, 11:35

mettamo, бинари самой СУБД должны быть доступны через переменную окружения PATH.

Для тестов драйвера лучше всего воспользоваться демкой %QTDIR%/demos/sqlbrowser

Автор: mettamo 3.6.2010, 12:09

в демке подключается...

Автор: Litkevich Yuriy 3.6.2010, 13:27

Цитата(mettamo @ 3.6.2010, 16:09) *
в демке подключается...
так, ты демку запускаешь из командной строки, из файлового менеджера или как-то ещё?

Автор: mettamo 3.6.2010, 13:53

из файлового менеджера

но в принципе демка компилится и работает, а из своего кирпича я подключиться не могу

Автор: Litkevich Yuriy 3.6.2010, 15:10

а в демку ты точно такие же данные вводишь, в частности "localhost"?

Автор: mettamo 3.6.2010, 17:42

да

Автор: mettamo 3.6.2010, 22:56

в чем может быть дело?

Автор: Litkevich Yuriy 3.6.2010, 23:09

Похоже из-за этого:

db.addDatabase("QPSQL", "new");

этот метод возвращает соединение, а ты его не используешь.
Посмотри в асистенте, как правильно создавать соединение

Автор: mettamo 3.6.2010, 23:28

блин заработало ура!!!! большое спасибо!!!

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)