Bonjour,
Je n'arrive pas à installer lalibrairie pqxx sous une plateforme windows.
L'utilisant actuellement sous Unix, j'ai besoin de porter mon projet sous windows.
Merci d'avance.
Bonjour,
Je n'arrive pas à installer lalibrairie pqxx sous une plateforme windows.
L'utilisant actuellement sous Unix, j'ai besoin de porter mon projet sous windows.
Merci d'avance.
Bonjour
(Anium,VASAPANCH, Pe04)
Avez vous déjà créé un programme lié backend avec la libpq uniquement via mingw et le pack PG binaire ?
Bonjour,
pour utiliser libpq (ou libpqxx pourquoi pas) sous Windows avec Visual C++ version 9, j'ai essayé :
1°) d'utiliser les fichiers qui se trouvent dans PostrGre\src\..\interfaces\libpq
J'indique les fichiers d'include et les fichiers lib. Pas de problème à la compil. Par contre à l'édition de lien j'obtiens un message du type :
et ce quelquesoit le fichier dll que j'utilise (celui dans Release et ceux que j'ai pu downloader).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 D:\Projets\lippqoo\interfaces\lib\Release\libpq.dll : fatal error LNK1107: fichier non valide ou endommagé : impossible de lire à 0x2C0
2°) j'en ai déduit qu'il fallait que je recompile les fichiers contenus dans Release. Après avoir résolu beaucoup de problèmes (liés au PATH, etc...) j'ai enfin pu lancer le make file avec le compilateur nmake fournit par Visual C++ 9.0 mais là je tombe sur une coquille dont je n'arrive pas à me sortir : cf. le post [compilation libpq débutant] sur ce forum.
Du coup, je bloque un peu.
Concernant la question de bustaf : Avez vous déjà créé un programme lié backend avec la libpq uniquement via mingw et le pack PG binaire ? j'avoue que je ne comprends pas tout.
En fouillant dans le source de PostGre je trouve bien un répertoire nommé backend dans lequel se trouve un autre répertoire nommé libpq. Voilà tout ce que j'ai pu faire...
Du coup j'ai quelques questions :
1-- qu'est qu'un programme lié backend ?
2-- qu'est que le pack PG binaire ?
3-- à quoi sert cette opération ?
4-- comment l'effectuer ?
5-- comment cette opération va permettre de résoudre mes problèmes de compilation ?
Enfin deux questions essentielles me tracassent :
1-- faut-il compiler la dll en fonction de l'outil de développement choisi ?
2-- est-il possible de créer des programmes en utilisant libpq sous Visual C++ 9.0 ?
Bonjour,
J'ai essayé de compiler sous Visual C++ 6.0 et l'erreur est la même : pas de problème à la compilation mais à l'édition de lien je retrouve mon fameux :
Dommage...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2D:\PROJETS\LIPPQOO\INTERFACES\LIB\RELEASE\libpq.dll : fatal error LNK1136: invalid or corrupt file
Salut,
en fait j'avais quelques soucis à la compilation de la bibliothèque. Finalement je pense que c'est la création des variables d'environnement 'à la main' qui n'était pas bonne.
En utilisant VCVARS32.BAT tout est OK !!!
Voir le post [compilation libpq] débutant. En particulier l'intervention nommée RESOLU.
A part le fait de DL postgre (pour ceux qui ne l'aurait pas), la manip pour compiler la dll et les includes, éditer le prog, les liens et l'éxécutable de test m'ont pris moins de 3/4 d'heure.
Ca vaut le coup de tester.
Merci pour vos réponses.
@bustaf : Que veux-tu dire parJ'utilise mingw et cygwin pour utiliser les outils autoconf et automake.Avez vous déjà créé un programme lié backend avec la libpq uniquement via mingw et le pack PG binaire ?
J'ai cette erreur bizarre lorsque je compile :
Pourtant les flags sont générés automatiquement par ce Makefile.am
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 g++ -DHAVE_CONFIG_H -I. -I.. -g -O2 -mms-bitfields -IC:/GTK/include/gtkmm-2.4 -IC:/GTK/lib/gtkmm-2.4/include -IC:/GTK/include/glibmm-2.4 -IC:/GTK/lib/glibmm-2.4/include -IC:/GTK/include/gdkmm-2.4 -IC:/GTK/lib/gdkmm-2.4/include -IC:/GTK/include/pangomm-1.4 -IC:/GTK/include/atkmm-1.6 -IC:/GTK/include/gtk-2.0 -IC:/GTK/include/sigc++-2.0 -IC:/GTK/lib/sigc++-2.0/include -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/cairomm-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/cairo -IC:/GTK/include/freetype2 -IC:/GTK/include -IC:/GTK/include/atk-1.0 -IC:/cygwin/usr/include/postgresql -g -O2 -MT adressbox.o -MD -MP -MF .deps/adressbox.Tpo -c -o adressbox.o adressbox.cpp :Invalide argument
PS : J'ai traduit mon code libpqxx en libpq parce que pqxx n'était pas présent dans cygwin et je sèche vraiment pour l'installer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 bin_PROGRAMS = gestion_appel gestion_appel_SOURCES = adressbox.cpp adresse.cpp callbox.cpp choicewindow.cpp customersbox.cpp \ datewidget.cpp editmessenger.cpp file.cpp gestion_appel.cc historybox.cpp infodb.cpp \ loginwindow.cpp main_window.cc mapping.cpp message.cpp messenger.cpp \ modelcolumns.cpp object.cpp onrequestbox.cpp personne.cpp tel_mail.cpp telmailbox.cpp mytime.cpp \ treeviewpopup.cpp noinst_HEADERS = adressbox.h adresse.h callbox.h choicewindow.h customersbox.h datewidget.h \ delete.h editmessenger.h file.h infodb.h historybox.h loginwindow.h main_window.hh mapping.h \ message.h messenger.h modelcolumns.h object.h onrequestbox.h personne.h tel_mail.h \ telmailbox.h mytime.h treeviewpopup.h if DEBUG AM_CXXFLAGS = -ggdb -Wall -DDEBUG @GTKMM_CFLAGS@ -IC:/cygdrive/c/cygwin/usr/include/postgresql gestion_appel_LDFLAGS = -ggdb -LC:/cygwin/usr/lib else AM_CXXFLAGS = @CXXFLAGS@ @GTKMM_CFLAGS@ -IC:/cygwin/usr/include/postgresql gestion_appel_LDFLAGS = -LC:/cygdrive/c/cygwin/usr/lib endif gestion_appel_LDADD = @LIBS@ @GTKMM_LIBS@ -lpq
J'ai fait un test sur un fichier utilisant seulement libpq et ça a compiler avec la ligne de compilation suivante :
g++ -I/usr/include main.cpp -o test.exe -L/usr/lib -lpq
Par contre j'ai du copier pas mal de dll dans le répertoire de l'exe.
J'ai donc appliqué cette ligne de compilation à mon makefile.am mais mon projet ne compile pas pour autant.
A priori, il ne trouve pas mon /usr/include. Pourtant il l'a trouvé avec mon test
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 make all-recursive make[1]: Entering directory `/cygdrive/c/Users/pin/Desktop/gestion_appel_pq' Making all in src make[2]: Entering directory `/cygdrive/c/Users/pin/Desktop/gestion_appel_pq/src' g++ -DHAVE_CONFIG_H -I. -I.. -g -O2 -mms-bitfields -IC:/GTK/include/gtkmm-2.4 -IC:/GTK/lib/gtkmm-2.4/include -IC:/GTK/include/glibmm-2.4 -IC:/GTK/lib/glibmm-2.4/include -IC:/GTK/include/gdkmm-2.4 -IC:/GTK/lib/gdkmm-2.4/include -IC:/GTK/include/pangomm-1.4 -IC:/GTK/include/atkmm-1.6 -IC:/GTK/include/gtk-2.0 -IC:/GTK/include/sigc++-2.0 -IC:/GTK/lib/sigc++-2.0/include -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/cairomm-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/cairo -IC:/GTK/include/freetype2 -IC:/GTK/include -IC:/GTK/include/atk-1.0 -I/usr/include -g -O2 -MT adressbox.o -MD -MP -MF .deps/adressbox.Tpo -c -o adressbox.o adressbox.cpp : No such file or directory make[2]: Leaving directory `/cygdrive/c/Users/pin/Desktop/gestion_appel_pq/src' make[1]: Leaving directory `/cygdrive/c/Users/pin/Desktop/gestion_appel_pq'
Bonjour (des hauts et des bas.....)
1-- qu'est qu'un programme lié backend ?
un programme qui connecte a la base via son source.
2-- qu'est que le pack PG binaire ?
La version binaire déjà compilée de postrgsql
3-- à quoi sert cette opération ?
L'utilisation du pack mingw est judicieuse pour le mode C++
(libpq++ et autres)
il faut faire une lib static .a (à partir des objets)
Aussi pour la question posée par
@ << dans le make
c'est simplement pour s'instruire d'une directive au link
j'ai volontairement fait une réponse fausse pour confirmer votre
niveau débutant réel.
Exemple compilateur Watcom (c'est +|- similaire avec les autres)
system begin statistics form win
form win
libpath ..\libs
library stats , etc ...
option stack=8k
end
instruction au shell:
wlink @stats file monprog
Je vais brancher une serveur Bill 2008 dans une heure ou deux et je regarde votre problème.
Confirmez SVP
vous avez l'install binaire postgresql 8.3.1 en O/S Bill ???
vous avez l'install MinGw 5.???
vous avez l'install MSYS ???
Vous avez Xp ,Vista ou serveur 2008
Vous avez VC++ en Version express 2008
@1|2+
vous avez l'install binaire postgresql 8.3.1 en O/S Bill ??? --> OK
vous avez l'install MinGw 5.??? --> 5.1.4
vous avez l'install MSYS ??? --> OK
Vous avez Xp ,Vista ou serveur 2008 --> vista
Vous avez VC++ en Version express 2008 --> je n'ai pas VC++
Bonjour,
j'ai réussi à compiler ma libpq pour Visual C++ 9 et je l'utilise avec plaisir maintenant. Même si je n'ai pour le moment pas besoin de libpqxx, je suivrai vos démarches si je trouve le temps (pas mal de pressions en ce moment et pas que celles que je m'enfilent le soir accoudé au zinx).
Concernant les éléments nécessaire :
vous avez l'install binaire postgresql 8.3.1 --> OK en O/S Bill ---> kesako ???
vous avez l'install MinGw 5.??? --> 5.1.3
vous avez l'install MSYS ??? --> je vais DL l'exe
Vous avez Xp ,Vista ou serveur 2008 --> XP
Vous avez VC++ en Version express 2008 --> OK
Vous avez libpq compilée pour Visual express 2008 --> OK !!!
(faut bien se réjouir de temps en temps)
-------------------------Concernant le @<< du make
Je n'ai pas bien compris la réponse mais j'ai un tel manque de connaissances sur le sujet qu'il me semble bon de ne pas trop m'attarder sur la question pour le moment quitte à revenir dessus un peu plus tard.
D'autant qu'en lancant VCVARS32.BAT mon nmake compile maintenant correctement le win32.mak qui "buggait" précédemment. Le problème vient surement du fait que j'avais tenté de définir à la main les variables d'environnement liées à VC++ et autres utilitaires nécessaires.
@ suivre...
ANIUM faites ce même test que je viens de faire.
J'installe MinGW 5.1.4 (install=MinGW 5.1.4.exe complète)
Je n'installe pas MSYS je vais voir d'abord comme ça.
J'ai un rep c:\mingw\bin\
il y a g++, gcc etc ..
Je recupère un prog backend pour le test.
/*
* test.cc
*
* Test the C version of libpq, the PostgreSQL frontend library.
*/
#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h"
/*#include "libpq++.h"*/
static void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
int
main(int argc, char **argv)
{
const char *conninfo;
PGconn *conn;
PGresult *res;
int nFields;
int i,
j;
/*
* If the user supplies a parameter on the command line, use it as the
* conninfo string; otherwise default to setting dbname=postgres and using
* environment variables or defaults for all other connection parameters.
*/
if (argc > 1)
conninfo = argv[1];
else
conninfo = "dbname = postgres";
/* Make a connection to the database */
conn = PQconnectdb(conninfo);
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
exit_nicely(conn);
}
/*
* Our test case here involves using a cursor, for which we must be inside
* a transaction block. We could do the whole thing with a single
* PQexec() of "select * from pg_database", but that's too trivial to make
* a good example.
*/
/* Start a transaction block */
res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
/*
* Should PQclear PGresult whenever it is no longer needed to avoid memory
* leaks
*/
PQclear(res);
/*
* Fetch rows from pg_database, the system catalog of databases
*/
res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
res = PQexec(conn, "FETCH ALL in myportal");
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
/* first, print out the attribute names */
nFields = PQnfields(res);
for (i = 0; i < nFields; i++)
printf("%-15s", PQfname(res, i));
printf("\n\n");
/* next, print out the rows */
for (i = 0; i < PQntuples(res); i++)
{
for (j = 0; j < nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
printf("\n");
}
PQclear(res);
/* close the portal ... we don't bother to check for errors ... */
res = PQexec(conn, "CLOSE myportal");
PQclear(res);
/* end the transaction */
res = PQexec(conn, "END");
PQclear(res);
/* close the connection to the database and cleanup */
PQfinish(conn);
return 0;
}
Je place ce code sous le nom test.cc dans le rep c:\mingw\bin
je tlc le prog postgresql 8.3.1 en binaire je le place à la racine c:\pgsql
Je copie les DLL chez Bill
xcopy c:\pgsql\bin\*.dll c:\windows\system32
cd c:\mingw\bin
g++ -I c:\pgsql\include -L c:\pgsql\lib test.cc -o test -lpq
c:\MinGW\bin>g++ -I c:\pgsql\include -L c:\pgsql\lib test.cc -o test -lpq
c:\MinGW\bin>test
Connection to database failed: could not connect to server: Connection refused (
0x0000274D/10061)
Is the server running on host "???" and accepting
TCP/IP connections on port 5432?
c'est normal la base n'est pas lancée
Il faut déjà faire ce test pour voir si il ne manque pas des dll
si il l'erreur est affichée c'est OK il a essayé de pluguer.
Vous obtenez le même résultat ???
J'ai suivi vos directives et j'ai réussi à me connecter à ma base de donnée :
Ça fait plaisir
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 datname datdba encoding datistemplate datallowconn datconnlimit datlastsysoid datfrozenxid dattablespace datconfig datacl template1 10 24 t t -1 11510 379 1663 {=c/postgres,postgres=CTc/postgres} template0 10 24 t f -1 11510 379 1663 {=c/postgres,postgres=CTc/postgres} postgres 10 24 f t -1 11510 379 1663 gestion_appel 16403 24 f t -1 11510 379 1663
J'adapte ça pour mon projet et je vous tiens au courant.
Bon même problème que précédemment :
Je pense que cygwin s'y perd dans les path, pour lui c:\ correspond à /cygdrive/c/.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 make all-recursive make[1]: Entering directory `/cygdrive/c/gestion_appel_pq' Making all in src make[2]: Entering directory `/cygdrive/c/gestion_appel_pq/src' g++ -DHAVE_CONFIG_H -I. -I.. -g -O2 -mms-bitfields -IC:/GTK/include/gtkmm-2.4 -IC:/GTK/lib/gtkmm-2.4/include -IC:/GTK/include/glibmm-2.4 -IC:/GTK/lib/glibmm-2.4/include -IC:/GTK/include/gdkmm-2.4 -IC:/GTK/lib/gdkmm-2.4/include -IC:/GTK/include/pangomm-1.4 -IC:/GTK/include/atkmm-1.6 -IC:/GTK/include/gtk-2.0 -IC:/GTK/include/sigc++-2.0 -IC:/GTK/lib/sigc++-2.0/include -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/cairomm-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/cairo -IC:/GTK/include/freetype2 -IC:/GTK/include -IC:/GTK/include/atk-1.0 -IC:/pgsql/include -g -O2 -MT aboutwindow.o -MD -MP -MF .deps/aboutwindow.Tpo -c -o aboutwindow.o aboutwindow.cpp : No such file or directory make[2]: Leaving directory `/cygdrive/c/gestion_appel_pq/src' make[1]: Leaving directory `/cygdrive/c/gestion_appel_pq'
J'ai tenté de modifier de cette manière dans makefile.am -> même résultat
Entering directory `/cygdrive/c/gestion_appel_pq'
Pour verifier la confusion de path
utilisez des ../../ sans le C: pour reculer et reprendre les racines des
repertoires concernés par rapport au path résident
NB
Votre automake construit fonctionne sans cette partie backend ???
Si c'est l'unique problème on peut le contourner rapidement.
(François pour le (spam) c'est le Forum qui tranche)
Je me permet de vous suivre car je suis interressé par créer un programme liée backend. J'ai suivi vos manips et j'en suis strictement au même point : j'ai la même erreur.
Si il vous semble que je ne devrais pas poster pour éviter le spam et vous permettre de mieux dialoguer avec amnium, indiquez le moi poliment... je comprendrai et je vous suvrai sans poster.
Cordialement,
François.
PS : pourquoi lorsque j'utilise pgsql binary for Bill avec installer, je ne retrouve pas mon répertoire include dans le bin ? Est-ce une erreur sur www.postgresql.com ?
Voila le fichier que tu dois prendre : http://wwwmaster.postgresql.org/down...-installer.zip
Il s'agit du no-installer
OK.
Avec ce fichier j'arrive au point indiqué par bustaf.
Je l'ai décompressé dans c:\pgsql\ comme indiqué.
Merci anium.
J'attends la suite pour pouvoir décommenter le fameux /*#include "libpq++.h"*/ .......
arggg.....
J'ai utilisé mon Makefile sur un prog de test postgre sans gtkmm et ça passe.
J'ai renseigné comme chemin des includes c:/pgsql/include et c:/pgsql/lib pour les librairies.
C'est donc gtk qui embête son monde. Pourtant les chemins sont bons puisque je peux accéder directement en tapant "ls c:/GTK/...." comme "ls /cygdrive/c/GTK/...."
J'ai essayé de compiler manuellement, ça marche sauf qu'il me sort le même message d'erreur "No such file or directory" mais le .o est bien généré.
Je vais ouvrir un autre post dans gtk car ça ne concerne plus postgresql.
Un grand merci à vous bustaf, pour votre aide.
Je pense que clou du make peut venir des nominatifs de vos fichiers avec du MAJUS et MINUS (le path c:\pgsql\include est en minus c'est la raison de son fonctionnement ... ??????)
ça marche c'est le principal..
Je vous donnes la manipe pour faire la compile avec Bill
Je vais couper le serveur Microsoft J'ai besoin d'utiliser une autre machine.
générer la lib à partir du fichier dll
Vous pouvez télécharger VC++ Express il semble gratuit ???
+ de 250 Mo au plus juste.... (Pour un simple plug backend j'espère que la manipe va fonctionner ....)
je construit la lib (pseudo static ??) libpqdll.lib
C:\Program Files\Microsoft Visual Studio 9.0\vc\bin>lib /def:libpqdll.def
Note le .def est dans le package source je suppose (je l'ai pris sur un sation Unix)
J'obtient libpqdll.lib
Note: le fichier libpqdll.def contient les directives @... voir l'exemple du meme genre watcom
C:\Program Files\Microsoft Visual Studio 9.0\vc\bin>lib /def:libpqdll.def
C:\Program Files\Microsoft Visual Studio 9.0\vc\bin>
cl /I c:\pgsql\include test.cc libpqdll.lib
Compilateur d'optimisation Microsoft (R) 32 bits C/C++ version 15.00.21022.08 pour 80x86
Copyright (C) Microsoft Corporation. Tous droits réservés.
test.cc
Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
/out:test.exe
test.obj
libpqdll.lib
C:\Program Files\Microsoft Visual Studio 9.0\vc\bin>
je copie gssapi32.dll dans C:\Program Files\Microsoft Visual Studio 9.0\vc\bin>
Je lance test
C:\Program Files\Microsoft Visual Studio 9.0\vc\bin>test
Connection to database failed: could not connect to server: Connection refused (
0x0000274D/10061)
Is the server running on host "???" and accepting
TCP/IP connections on port 5432?
c'est kif_kif l'autre ,mais avec Las Vegas dans le HD en plus...
Bon courage
Finalement, pour info, mon problème était lié à pkg-config. Si je copie les cflags et libs de gtkmm-2.4 générés par pkg-config directement dans mon Makefile.am, tout compile bien.
Par contre j'ai un problème de dll, il n'arrive pas à trouver cygpq.dll, elle n'est pas présente sur le disque dur...
J'ai tenté de renommer libpq.dll en cygpq.dll mais mon application ne fait rien du tout, aucun message d'erreur... ça ne doit pas être la même.
Edit : Ça y est mon appli se lance ; il me manquait l'installation du paquet libpq5 au sein de cygwin.
Je passe définitivement en résolu.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager