|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Membre du Club
![]() Ingénieur TIC Inscription : mars 2010 Messages : 87 ![]() |
Bonjour,
je viens de commencer actuellement à travailler sur des procédures stockées en langage C sous windows xp, et je rencontre un problème lors de l'appel de mon fichier so via un procédures pl/pgsql/. voici le petit code d'essai de ma fonction: Code :
et voici le code d'appel de mon fichier.so Code :
Citation:
|
|||||
|
|
00
|
|
|
#2 |
|
Inactif
![]() Inscription : novembre 2004 Messages : 247 ![]() |
Bonjour
Pour l'O/S Microsoft regardez dans ce lien http://www.scribd.com/doc/40725510/B...ons-on-Windows Cordialement |
|
|
00
|
|
|
#3 | |
|
Membre du Club
![]() Ingénieur TIC Inscription : mars 2010 Messages : 87 ![]() |
Bonjour bustaf,
Merci pour le lien, il s'est avéré très intéressant, mais Windows m'a agacé la vie, donc je re à mon linux, le problème c'est que dans la même situation telle que j'avais décrit au départ il m'affiche l'erreur suivante: Citation:
|
|
|
|
00
|
|
|
#4 | ||
|
Inactif
![]() Inscription : novembre 2004 Messages : 247 ![]() |
Bonjour ratata
Code :
|
||
|
|
10
|
|
|
#5 | |
|
Membre du Club
![]() Ingénieur TIC Inscription : mars 2010 Messages : 87 ![]() |
Bonjour Bustaf,
Merci pour ta réponse, alors à ce qui paraît, j'ai une arborescence un peu différente, vu que mes include n'existent pas dans les chemins que vous m'avez cités aussi, je n'ai pas les fichiers "fmgr.h" et "geo_decls.h", mais en cherchant par-ci par-là, j'ai trouvé que "postgres.h" suffirait, ainsi que elog.h et errcodes.h,mais au moment de la compilation: gcc -shared projet.c -o projet.so (j'ai aussi essayé la commande que vous m'avez proposée ) ça me donne ce qui est en-dessous, je rappelle juste que je suis sur postgresql 9.0 Citation:
|
|
|
|
00
|
|
|
#6 |
|
Inactif
![]() Inscription : novembre 2004 Messages : 247 ![]() |
Bonjour ratata
Les chemins que je donne dans l'exemple sont les chemins par défaut avec des sources postgresql compilées sans un flag (--prefix) défini tapez au shell (en root) find / -name errcodes.h -print vous devez trouver un répertoire include/server/utils qui contient également palloc.h etc ... Si ces fichiers sont absents, il faut compiler les sources pour générer une installation complète standard. Je peux vous aider pour cette tâche si vous me donnez les infos suivantes 1] Votre distribution Linux ? 2] gcc -v ? 3] cat /proc/cpuinfo (ou dmidecode -t4) ? Cordialement |
|
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() Ingénieur TIC Inscription : mars 2010 Messages : 87 ![]() |
reBonjour Bustaf,
Tous mes fichiers d'extension "h" sont contenus dans /usr/include/potgresql,dans lequel sont localisés des dossiers (dont utils fait partie et absence de server et des fichier dont postgres.h ). Pour errcodes et palloc, ils sont contenus dans /usr/include/postgresql/utils/ Pour les informations que vous m'avez demandées: je suis sur la distribution ubuntu 10.04 LTS. ma version du compilateur gcc est 4.4.3 pour mon processeur : c'est un Core 2 DUO Citation:
Citation:
Merci encore une fois Bustaf, et passez une agréable fin de journée. |
||
|
|
00
|
|
|
#8 | ||||
|
Inactif
![]() Inscription : novembre 2004 Messages : 247 ![]() |
Re bonjour
Changez le path qui est dans postgres.h ligne 48 et 49 Code :
Code :
(ldconfig c'est pour informer le cache d'une nouvelle librairie) (la copie du so dans /usr/lib c'est pour qu'il trouve la lib) la copie optionnelle de l'objet *.o c'est pour retrouver l'objet natif. Votre configuration machine est parfaitement appropriée à un serveur Postgresql http://ark.intel.com/Product.aspx?id=30781 Vote O/S Linux est installé en 32 ou en 64 ? Si on compile une deuxième instance postgresql en parallèle cela ne change absolument rien à votre ensemble pré-existant... Cordialement |
||||
|
|
10
|
|
|
#9 |
|
Membre du Club
![]() Ingénieur TIC Inscription : mars 2010 Messages : 87 ![]() |
Bonjour,
Merci beaucoup pour votre feedback, mon linux est installé en 32 bits. Donc je recompile une deuxième instance de postgresql et je réalise les rectifications et je vous tiens en courant des nouveautés. Excellente journée. |
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Ingénieur TIC Inscription : mars 2010 Messages : 87 ![]() |
Bonjour Bustaf,
vous êtes vraiment une perle, merci beaucoup d'avoir pris la peine et aussi d'avoir consacré le temps pour résoudre la problématique, effectivement j'ai compilé et installé une nouvelle instance de postgreSQL à partir du code source, aussi pour tous les includes qui existent dans mes fichier ".h" il a fallu mettre la totalité du chemin (depuis la racine). Un conseil aux personnes qui liront ce post et qui utilisent le SGBD postgreSQL, mieux vaut compiler et installer vous-même votre SGBD à partir du code source que de suivre la méthode standard d'installation , comme ça vous êtes connaisseur de votre arborescence système et du fait qu'il ne lui manque absolument rien, puisque vous faites tout par vos propres mains, et non pas la machine. Merci encore bustaf, et bonne journée. |
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Ingénieur TIC Inscription : mars 2010 Messages : 87 ![]() |
Re bonjour,
le seul soucis qui reste, c'est qu'il faut passer par tous les fichier ".h" pour modifier les chemins de leurs include, par contre je crois avoir déjà vu quelque part qu'on peut préciser au moment de la compilation le chemin des librairies , comme ça ce souci ne se présentera plus, il faut juste que je retrouve la syntaxe (je m'en rappelle plus), sinon si tu l'as entre les mains bustaf je t'en remercierais infiniment, entre temps je vais la chercher. bonne journée. |
|
|
00
|
|
|
#12 |
|
Inactif
![]() Inscription : novembre 2004 Messages : 247 ![]() |
bonjour ratata
Pour les .h le flag gcc est -I (majuscule) pour les .a ou .so le flag gcc est -L (majuscule) Si ça ne marche pas ne vous prenez pas la tête, patientez juste un petit moment je vais installer une Ubuntu en 32 pour voir ce qui ne va pas. j'utilise une Debian 6 , normalement Ubuntu c'est la même base . Cordialement |
|
|
00
|
|
|
#13 |
|
Membre du Club
![]() Ingénieur TIC Inscription : mars 2010 Messages : 87 ![]() |
Bonjour Bustaf,
effectivement, j'avais testé hier cette commande avec cette option, mais ça donne toujours le même soucis j'ai utilisé comme PATH : /user/local/pgsql/include. pour Ubuntu c'est une distribution de la famille Debian ?? Excellente journée. |
|
|
00
|
|
|
#14 |
|
Inactif
![]() Inscription : novembre 2004 Messages : 247 ![]() |
Bonjour ratata
Oui Ubuntu est générée à partir d'une base Debian C'est une distribution de très grande qualité qui est gérée par une équipe très sérieuse et très compétente. Cordialement |
|
|
00
|
|
|
#15 | ||||
|
Inactif
![]() Inscription : novembre 2004 Messages : 247 ![]() |
Bonjour ratata
J'ai installé une Unbuntu 10.04 (32) ça fonctionne parfaitement comme sous Debian postgres@bustaf-desktop:/usr/local/pgsql/bin$ ./psql base psql (9.0.4) Type "help" for help. base=# CREATE FUNCTION projet(integer) RETURNS integer AS '/usr/lib/projet', 'projet' LANGUAGE C STRICT; CREATE FUNCTION base=# Le compilateur GNU d'origine (Ubuntu 10.04) root@bustaf-desktop:/usr/local/pgsql/bin# gcc -v Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu Thread model: posix gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) root@bustaf-desktop:/usr/local/pgsql/bin# dans /usr/local/pgsql/include/server/utils/elog.h ligne 69 vous désactivez //#include "utils/errcodes.h" Dans la fonction Code :
(je termine les explications ce soir) j'ai du TAF ..... (la suite .....) Avec une Unbuntu 10.04 (32) Menu Applications -> accessoires-> terminal sudo -s (votre password est demandé pour passer en root) aptitude install libreadline-dev libreadline6 libreadline6-dev flex zlib1g-dev zlib1g sed automake téléchargez les sources de pg 9.0.4 http://wwwmaster.postgresql.org/redi...l-9.0.4.tar.gz mkdir /usr/src/download (création d'un répertoire pour compiler) chmod -R 777 /usr/src/download (ouverture complète des droits sur ce repertoire) cp votre_rep_de_telechargemnet/postgresql-9.0.4.tar.gz /usr/src/download cd/usr/src/download tar xvfz postgresql-9.0.4.tar.gz (décompression de l'archive) cd postgresql-9.0.4 ./configure (il n' y a pas d'erreurs logiquement) make --jobs=2 (compilation avec 2 forks) (Après quelques minutes La compilation se termine sans erreurs) adduser postgres (création d'un utilisateur postgres (je lui donne un passwd uniquement)) su postgres (je passe en utilisateur postgres) time make check je vois 120 tests OK et le temps (time) exit (je reviens en root) make install (une instance s'installe dans /usr/local/pgsql) cd /home mkdir pgsql (création du répertoire de la base de données) chmod -R 0700 pgsql (Droits d’accès) chown -R postgres pgsql (propriété) su postgres (je passe en utilisateur postgres) ./initdb -D /home/pgsql (initialisation l'instance dans le répertoire /home/pgsql) exit (je reviens en root) cd /usr/local/pgsql/bin création du fichier projet.c Code :
ligne 69 a desactiver //#include "utils/errcodes.h" gcc -fPIC -c projet.c gcc -shared -o projet.so projet.o cp projet.so projet.o /usr/lib ldconfig su postgres (je passe en utilisateur postgres) ./pg_ctl -D /home/pgsql start (démarrage de l'instance) ./createdb base (création d'une base bidon pour le test) ./psql base (ouverture dans la base base) CREATE FUNCTION projet(integer) RETURNS integer AS '/usr/lib/projet', 'projet' LANGUAGE C STRICT; La fonction se charge.... Pour votre processeur avant de compiler ou le ./configure de postgres tapez export CFLAGS="-mtune=core2" Avec votre type de processeur essayez en O/S 64 je pense que c'est plus judicieux. Pour PG la 9.04 me semble très fiable et bien plus performante que la série des 8.x .. c'est à vous de voir .... Cordialement |
||||
|
|
00
|
|
|
#16 |
|
Membre du Club
![]() Ingénieur TIC Inscription : mars 2010 Messages : 87 ![]() |
ReBonjour,
Merci beaucoup bustaf, effectivement, je suis déjà passé par l'installation à la main de postgresql 9.04, et ma première petite fonction avait bien marché en modifiant les chemins des entêtes de mes fichiers ".h auxquels je fait appel, la problématique que j'avais annoncé venait du fait qu'avec d'autres fonctions on fera appel à d'autres fichiers ".h" dont il faudra aussi modifier les chemins des entêtes, ce qui nous laisse penser qu'il faut modifier les entêtes de tous les fichiers ".h" du dossier /usr/local/pgsql/include/, chose que j'ai faite Bon, là c'est résolu en entier, merci encore, je cherche juste une référence pour pouvoir écrire des fonctions C très avancées, surtout que je n'arrive pas à trouver l'équivalent de "GetAttributeByName" en input "le set en BD" , et je vois bien que ce poste sera une petite première capitalisation pour le forum et pour les personnes qui désirent s'initier en développement des procédures stockées en langage C. Passez une agréable journée. |
|
|
00
|
|
|
#17 |
|
Inactif
![]() Inscription : novembre 2004 Messages : 247 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com