Dibosa's Blog

Compilación del plugin de las librerías QT para PostgreSQL en Ubuntu 9.10

El plugin para Postgres de las versiones oficiales 4.5.2 y 4.5.3 de las librerías QT presenta un error en las consultas de números de coma flotante que provoca el truncado de los decimales. En esta página vamos a exponer una forma sencilla de compilar el driver corregido para sustituir al original.

El primer paso será identificar la versión de nuestras librerías QT y descargar los fuentes de las mismas. Si utilizamos Ubuntu 9.10, verificaremos a través de la consulta de los paquetes instalados que nuestra versión es la “4.5.3really4.5.2-0ubuntu1″; En la página  http://packages.ubuntu.com/karmic/libqt4-sql-psql podremos encontrar un enlace al paquete qt4-x11_4.5.3really4.5.2.orig.tar.gz que descargaremos y descomprimiremos en una carpeta de nuestro sistema de archivos de usuario. Nuestra siguiente tarea será configurar las QT para que operen con el plugin de Postgres; para ello nos situaremos en el directorio qt-x11-opensource-src-4.5.2 y ejecutaremos:

./configure -plugin-sql-psql

Tras la configuración, localizaremos el fichero “qsql_psql.cpp” con el contenido del código fuente del plugin en la ruta qt-x11-opensource-src-4.5.2/src/sql/drivers/psql, y lo sustituiremos por el descargado de la página http://bugreports.qt.nokia.com/browse/QTBUG-5179.

Para la compilación del plugin necesitaremos enlazar con las librerías de la versión de desarrollo de Postgres “libpq-dev”, que podremos instalar con algún gestor de paquetes (por ejemplo el de Synaptic). El siguiente paso consistirá en la edición del fichero “psql.pro” que encontraremos en qt-x11-opensource-src-4.5.2/src/plugins/sqldrivers/psql, al que añadiremos unas líneas para informar de la localización de las librerías Postgres:

INCLUDEPATH+=/usr/include/postgresql /usr/include/postgresql/libpq
LIBS+=-L/usr/lib -lpq

Por último, nos situaremos en el directorio “qt-x11-opensource-src-4.5.2″, y compilaremos:

make

No efectuaremos “make install” porque tan solo estamos interesados en el fichero del plugin, que podremos encontrar en “qt-x11-opensource-src-4.5.2/plugins/sqldrivers/libqsqlpsql.so”. Este archivo lo copiaremos a la ruta donde está situado el plugin Postgres de nuestra distribución Linux: /usr/lib/qt4/plugins/sqldrivers

12 comentarios »

  1. como seria para que esto mismo que hicieron en linux se haga en windows

    Comentario por Sergio — marzo 8, 2010 @ 11:21 pm | Responder

  2. El driver de las QT en Windows no presenta este error. No obstante, en el artículo “Aplicaciones multiplataforma con QT4 y C++” se trata la compilación del driver QT para MySQL; para PostgreSQL el proceso sería similar.

    Comentario por dibosa — marzo 9, 2010 @ 9:58 am | Responder

    • a mi me manda que el driver no existe por eso es que queria crear el driver, estoy usando Qt Creator

      Comentario por sergio — marzo 9, 2010 @ 7:55 pm | Responder

      • Tienes que descargarte los fuentes de las qt y configurarlas con la utilidad configure para que se creen y compilen los drivers para las bases de datos que quieras. Por defecto creo que sólo se genera soporte para SQLITE. Después tienes que recompilar enlazando con las librerías de desarrollo de la base de datos. Para Postgres no tienes que convertir las librerías como en MySQL

        Comentario por dibosa — marzo 10, 2010 @ 10:35 am

      • gracias por tu ayuda, voy hacer eso.

        Comentario por Sergio — marzo 12, 2010 @ 9:56 pm

      • logre crear las dll se guardan en el directorio plugins/sqldrivers, los archivos que se crearon son:
        qsqlpsql4.dll,qsqlpsqld4.dll,libqsqlpsqld4.a,libqsqlpsql4.a pero aun no detecta los drivers

        uso el siguiente codigo para ver si el driver existe,

        #ifndef DATABASE_H
        #define DATABASE_H

        #include
        #include
        #include
        #include

        static bool createConnection()
        {

        if (QSqlDatabase::isDriverAvailable(“QPSQL”)) {

        QMessageBox::critical(0, qApp->tr(“Database Open”),qApp->tr(“Driver encontrado.\n”
        “Haga clic en en cancel para salir.”), QMessageBox::Cancel);

        }

        else
        {

        QMessageBox::critical(0, qApp->tr(“No Se Abre la base de datos”),qApp->tr(“Driver no encontrado.\n”
        “Click Cancel to exit.”), QMessageBox::Cancel);

        }

        return true;
        }

        #endif

        he buscado por todos lados para ver como cargar el driver pero no lo logro hacer yo se que he estado haciendo muchas preguntas disculpa tanta molestia.

        Gracias de antemano.

        Comentario por sergio — marzo 19, 2010 @ 8:18 pm

      • Después de la compilación habrás tenido que realizar un “make install”

        De todas formas, copia los archivos de los plugins al mismo directorio donde tienes el ejecutable del programa, copia también el libpq.dll y prueba a ver qué es lo que pasa.
        Yo dí soporte a KEME compilando todos los drivers dentro del controlador sql en lugar de crear los plugins

        Un saludo,

        José Manuel

        Comentario por dibosa — marzo 19, 2010 @ 9:18 pm

  3. Funciono al fin encuentra el plugin, para que funcionara, copie las dll de la carpeta bin de la carpeta de instalacion de postgresql a donde esta el ejecutable del aplicativo en Qt.

    Comentario por sergio — abril 22, 2010 @ 10:30 pm | Responder

  4. Hola soy nuevo en esto tengo una pregunta a que te refieres con “fuentes de las qt y configurarlas con la utilidad configure”

    Comentario por Fernando — febrero 5, 2011 @ 2:52 am | Responder

  5. Los fuentes de la qt no son más que el código C++ en el que están programadas las librerías. La utilidad “configure” es un comando que sirve para configurar la compilación de las librerías y de esta forma adaptarlas a nuestras necesidades.

    Un saludo

    Comentario por dibosa — febrero 6, 2011 @ 10:43 am | Responder

  6. Gracias por la respuesta, ya tengo los drivers de postgres siguiendo tus pasos, solo que no puedo compilar en modo release solo me deja en debug.

    Comentario por Fernando — febrero 19, 2011 @ 2:57 am | Responder

    • Esto puede ser debido a la forma en que has construido las librerías QT y/o los drivers; trata de volver a compilarlas para que soporten específicamente el modo “release”

      Un saludo

      Comentario por dibosa — febrero 19, 2011 @ 11:37 am | Responder


RSS feed para los comentarios de esta entrada. URI para TrackBack.

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Tema Rubric. Blog de WordPress.com.

Seguir

Get every new post delivered to your Inbox.