Seite 1 von 1

QDBC unter lenny64bit bauen....

Verfasst: 30. November 2009 12:58
von AuE
Hi,

hab gerade versucht das QODBC Plugin zu bauen (lenny 64 bit) die unixODBC und -devel sind installiert.

Also lt. Doku sollte es ja wie folgt funtionieren:
It is recommended that you use unixODBC. You can find the latest version and ODBC drivers at http://www.unixodbc.org. You need the unixODBC header files and shared libraries.

Tell qmake where to find the unixODBC header files and shared libraries (here it is assumed that unixODBC is installed in /usr/local/unixODBC) and run make:
cd $QTDIR/src/plugins/sqldrivers/odbc
qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc"
make
Hab ich auch so gemacht....aber:

Das qmake meckert folgendes:
/opt/qtsdk-2009.04/qt/src/plugins/sqldrivers/odbc$ qmake "INCLUDEPATH+=/usr/include" "LIBS+=-L/usr/lib64/odbc -lodbc"
qpluginbase.pri:10: Unknown replace function: qtLibraryTarget
Failure to open file: /opt/qtsdk-2009.04/qt/src/plugins/sqldrivers/odbc/Makefile
Das makefile existiert.

Hier das Ergebnis des make:


usr:/opt/qtsdk-2009.04/qt/src/plugins/sqldrivers/odbc# ls -la
total 28
drwxr-xr-x 2 root root 4096 Nov 30 12:51 .
drwxr-xr-x 11 root root 4096 Nov 11 13:01 ..
-rwxrwxrwx 1 root root 4471 Nov 30 12:55 Makefile
-rw-r--r-- 1 root root 199 Sep 29 13:01 README
-rw-r--r-- 1 root root 2791 Sep 29 13:01 main.cpp
-rw-r--r-- 1 root root 422 Sep 29 13:01 odbc.pro
usr:/opt/qtsdk-2009.04/qt/src/plugins/sqldrivers/odbc# make
g++ -c -pipe -g -Wall -W -O2 -D_REENTRANT -fPIC -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_PLUGIN -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I/usr/include -I/usr/include/qt3 -o main.o main.cpp
In file included from main.cpp:44:
../../../sql/drivers/odbc/qsql_odbc.h:45:30: error: QtSql/qsqldriver.h: No such file or directory
../../../sql/drivers/odbc/qsql_odbc.h:46:30: error: QtSql/qsqlresult.h: No such file or directory
In file included from main.cpp:44:
../../../sql/drivers/odbc/qsql_odbc.h:84: error: 'QT_BEGIN_HEADER' does not name a type
../../../sql/drivers/odbc/qsql_odbc.h:94: error: expected class-name before '{' token
../../../sql/drivers/odbc/qsql_odbc.h:115: error: 'QSqlRecord' does not name a type
../../../sql/drivers/odbc/qsql_odbc.h:120: error: ISO C++ forbids declaration of 'QODBCPrivate' with no type
../../../sql/drivers/odbc/qsql_odbc.h:120: error: expected ';' before '*' token
../../../sql/drivers/odbc/qsql_odbc.h:124: error: invalid use of incomplete type 'struct QSqlDriver'
/usr/include/qt3/qsqldriverplugin.h:52: error: forward declaration of 'struct QSqlDriver'
../../../sql/drivers/odbc/qsql_odbc.h:130: error: 'DriverFeature' has not been declared
../../../sql/drivers/odbc/qsql_odbc.h:132: error: ISO C++ forbids declaration of 'QSqlResult' with no type
../../../sql/drivers/odbc/qsql_odbc.h:132: error: expected ';' before '*' token
../../../sql/drivers/odbc/qsql_odbc.h:133: error: 'QSql' has not been declared
../../../sql/drivers/odbc/qsql_odbc.h:134: error: 'QSqlRecord' does not name a type
../../../sql/drivers/odbc/qsql_odbc.h:135: error: 'QSqlIndex' does not name a type
../../../sql/drivers/odbc/qsql_odbc.h:137: error: expected ',' or '...' before '&' token
../../../sql/drivers/odbc/qsql_odbc.h:138: error: ISO C++ forbids declaration of 'QSqlField' with no type
../../../sql/drivers/odbc/qsql_odbc.h:146: error: 'IdentifierType' has not been declared
../../../sql/drivers/odbc/qsql_odbc.h:160: error: 'QT_END_NAMESPACE' does not name a type
main.cpp:57: error: 'QODBCDriverPlugin' has not been declared
main.cpp:57: error: ISO C++ forbids declaration of 'QODBCDriverPlugin' with no type
main.cpp: In function 'int QODBCDriverPlugin()':
main.cpp:58: error: only constructors take base initializers
main.cpp: At global scope:
main.cpp:62: error: 'QODBCDriverPlugin' is not a class or namespace
main.cpp: In function 'QSqlDriver* create(const QString&)':
main.cpp:64: error: 'QLatin1String' was not declared in this scope
main.cpp:66: error: cannot convert 'QODBCDriver*' to 'QSqlDriver*' in return
main.cpp: At global scope:
main.cpp:71: error: 'QODBCDriverPlugin' is not a class or namespace
main.cpp:71: error: non-member function 'QStringList keys()' cannot have cv-qualifier
main.cpp: In function 'QStringList keys()':
main.cpp:74: error: 'QLatin1String' was not declared in this scope
main.cpp: At global scope:
main.cpp:79: error: expected constructor, destructor, or type conversion before '(' token
make: *** [main.o] Error 1

Verfasst: 30. November 2009 16:31
von AuE
Keiner von euch eine Idee?

Habe mir nochmal die src von unixODBC gesaugt und kompiliert und make install aufgerufen. qmake schritt mit neuen pfaden angepasst.

Immernoch der Fehler von wegen "qpluginbase.pri:10: Unknown replace function: qtLibraryTarget"

Und naja das make schlägt dann nat. auch mit fehl.

Jemand eine Idee?

Verfasst: 30. November 2009 17:01
von Mani99
Wasn für linux? Event. fehlen dir die build essentials?

Das paket müsste "build-essential" heißen.

Und ich behaupte auch zu glauben das es

Code: Alles auswählen

qmake "INCLUDEPATH=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc"
und nicht

Code: Alles auswählen

qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc" 
heißen müsste!

Verfasst: 30. November 2009 17:28
von AuE
apt-get install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version.

Das + bedeutet ja nur das vorherige Einträge beibehalten werden. Also eig. kann es daran net liegen.

Ausserdem siehe txt in der doku.... daher hab ich das alles.

Verfasst: 1. Dezember 2009 08:30
von Mani99
Ja, aber in die *.pro datei trägt man den INCLUDEPATH ja auch ohne + ein:

Code: Alles auswählen

INCLUDEPATH = /usr/lib/bla /usr/share/bla ...
Ich würde sagen, probiers einfach mal!

Verfasst: 1. Dezember 2009 08:42
von AuE
Hat leider keinen Effekt.

Scheint entweder nen 64bit Pob zu sein oder liegt am 2009.04 Paket.

War grade in der chroot (lenny 32 mit 2009.03 Qt) da kann ichs bauen und habe dann auch die libsqlobc.so ....

Strange....


Output in der lenny 32:
BASH:/# cd /opt/qtsdk-2009.03/qt/src/plugins/sqldrivers/odbc/
BASH:/opt/qtsdk-2009.03/qt/src/plugins/sqldrivers/odbc# qmake
BASH:/opt/qtsdk-2009.03/qt/src/plugins/sqldrivers/odbc# make
make: Nothing to be done for `first'.
BASH:/opt/qtsdk-2009.03/qt/src/plugins/sqldrivers/odbc# make clean
rm -f moc_qsql_odbc.cpp
rm -f main.o qsql_odbc.o moc_qsql_odbc.o
rm -f *~ core *.core
BASH:/opt/qtsdk-2009.03/qt/src/plugins/sqldrivers/odbc# make
g++ -c -pipe -O2 -fvisibility=hidden -fvisibility-inlines-hidden -D_REENTRANT -Wall -W -fPIC -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../../mkspecs/linux-g++ -I. -I../../../../include/QtCore -I../../../../include/QtSql -I../../../../include -I. -o main.o main.cpp
g++ -c -pipe -O2 -fvisibility=hidden -fvisibility-inlines-hidden -D_REENTRANT -Wall -W -fPIC -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../../mkspecs/linux-g++ -I. -I../../../../include/QtCore -I../../../../include/QtSql -I../../../../include -I. -o qsql_odbc.o ../../../sql/drivers/odbc/qsql_odbc.cpp
/opt/qtsdk-2009.03/qt/bin/moc -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../../mkspecs/linux-g++ -I. -I../../../../include/QtCore -I../../../../include/QtSql -I../../../../include -I. ../../../sql/drivers/odbc/qsql_odbc.h -o moc_qsql_odbc.cpp
g++ -c -pipe -O2 -fvisibility=hidden -fvisibility-inlines-hidden -D_REENTRANT -Wall -W -fPIC -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../../mkspecs/linux-g++ -I. -I../../../../include/QtCore -I../../../../include/QtSql -I../../../../include -I. -o moc_qsql_odbc.o moc_qsql_odbc.cpp
rm -f libqsqlodbc.so
g++ -Wl,-O1 -Wl,-rpath,/opt/qtsdk-2009.03/qt/lib -shared -o libqsqlodbc.so main.o qsql_odbc.o moc_qsql_odbc.o -L/opt/qtsdk-2009.03/qt/lib -lodbc -lQtSql -L/opt/qtsdk-2009.03/qt/lib -pthread -pthread -lQtCore -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread
BASH:/opt/qtsdk-2009.03/qt/src/plugins/sqldrivers/odbc# find . | grep libqsqlodbc.so
./libqsqlodbc.so
BASH:/opt/qtsdk-2009.03/qt/src/plugins/sqldrivers/odbc#
BASH:/opt/qtsdk-2009.03/qt/src/plugins/sqldrivers/odbc# ls -la
total 312
drwxr-xr-x 2 root root 4096 Dec 1 07:43 .
drwxr-xr-x 11 root root 4096 Aug 4 10:27 ..
-rw-r--r-- 1 root root 8378 Dec 1 07:43 Makefile
-rw-r--r-- 1 root root 199 Jun 20 04:57 README
-rwxr-xr-x 1 root root 125268 Dec 1 07:43 libqsqlodbc.so
-rw-r--r-- 1 root root 2807 Jun 20 04:57 main.cpp
-rw-r--r-- 1 root root 9364 Dec 1 07:43 main.o
-rw-r--r-- 1 root root 1840 Dec 1 07:43 moc_qsql_odbc.cpp
-rw-r--r-- 1 root root 5372 Dec 1 07:43 moc_qsql_odbc.o
-rw-r--r-- 1 root root 422 Jun 20 04:57 odbc.pro
-rw-r--r-- 1 root root 125016 Dec 1 07:43 qsql_odbc.o
BASH:/opt/qtsdk-2009.03/qt/src/plugins/sqldrivers/odbc#

Verfasst: 1. Dezember 2009 08:47
von franzf
Hast du dir denn überhaupt mal die Zeilen deines Compile-Outputs GENAU (!) angeschaut?

Code: Alles auswählen

g++ -c -pipe -g -Wall -W -O2 -D_REENTRANT -fPIC -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_PLUGIN -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I/usr/include -I/usr/include/qt3 -o main.o main.cpp 
Fällt dir was auf? Richtig, includes und mkspecs zeigen auf die deiner qt3-Installation.
Das /opt/qtsdk-2009.04/ deutet aber darauf hin, dass es bitte ein qt4 sein sollte.
Setz mal deine Umgebung korrekt auf (am wichtigsten ein korrektes QTDIR), dann schau mal weiter.

Außerdem nehme ich nicht an, dass dein libodbc.so in /usr/lib64/odbc/ liegt, sondern direkt in /usr/lib64. Lass dazu einfach mal das "-L/usr/lib64/odbc" weg.

Verfasst: 1. Dezember 2009 09:37
von AuE
jepp... das wars ;-) Wenn ich auf alle Fehler geschaut habe....aber darauf wäre ich nicht gekommen...

Im PATH steht bei mir allerdings nur /usr/bin wo ein qmake3 und qmake 4 liegen.

Und einQTDIR finde ich auch leider nirgends in meiner Umgebung:
BASH:~$ set | grep -i -e qt
LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:'
_filedir '@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|ASF|vob|VOB|bin|BIN|dat|DAT|vcd|VCD|ps|PS|pes|PES|fl[iv]|FL[IV]|viv|VIV|rm?(j)|RM?(J)|ra?(m)|RA?(M)|yuv|YUV|mov|MOV|qt|QT|mp[34]|MP[34]|m4[av]|M4[AV]|og[gm]|OG[GM]|w?(a)v|W?(A)V|dump|DUMP|mk[av]|MK[AV]|m4a|M4A|aac|AAC|m2v|M2V|dv|DV|rmvb|RMVB|mid|MID|ts|TS|3g[p2]|mpc|MPC|flac|FLAC|vro|VRO|divx|DIVX|aif?(f)|AIF?(F)|m2ts|M2TS)'
Und auch via exportwar kein QTDIR zu finden.
Habe es jetzt via export QTDIR=/opt/qtsdk-2009.04/
gesetzt.
Dachte aber das das durch die Installation gesetzt wird...mhhh