IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

[PG FONCTION C] Probleme palloc.h sous windows


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 83
    Points
    83
    Par défaut [PG FONCTION C] Probleme palloc.h sous windows
    Sujet : Développement de fonction C sous Postgre pour renvoyer des RECORD et des SET OF

    Configuration : Postgre 8.2 (et 8.3) sur OS Windows XP, compilation sous Dev Cpp


    Bonjour,

    Lorsque je cherche à compiler ma dll (pour créer mes fonctions C sous PostGre) j'ai un problème récurrent avec les fonctions définies dans palloc.h

    Ainsi lorsque j'utilisais palloc() j'avais l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      [Linker error] undefined reference to `libpostgres_a_iname' 
      [Linker error] undefined reference to `libpostgres_a_iname' 
      [Linker error] undefined reference to `_nm__CurrentMemoryContext'
    En parcourant des forums j'ai vu qu'il était possible d'utiliser pgport_palloc à la place de palloc. Cela m'a permis de résoudre mon problème.

    Mais maintenant que je cherches à utiliser des SRF pour renvoyer des SET OF, j'ai le même problème qui survient avec l'utilisation de :

    MemoryContextSwitchTo()

    Quelqu'un aurait-il une idée ?

    Notes :

    1- MemoryContext monContext; ne pose pas de problème par contre.

    2- Dans palloc.h on peut lire :

    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
    /*
     * MemoryContextSwitchTo can't be a macro in standard C compilers.
     * But we can make it an inline function when using GCC.
     */
    #ifdef __GNUC__
     
    static __inline__ MemoryContext
    MemoryContextSwitchTo(MemoryContext context)
    {
    	MemoryContext old = CurrentMemoryContext;
     
    	CurrentMemoryContext = context;
    	return old;
    }
    #else
     
    extern MemoryContext MemoryContextSwitchTo(MemoryContext context);
    #endif   /* __GNUC__ */
    3- Normalement je linke avec libpostgres.a uniquement mais pour tester j'ai linké avec toutes celles présentes dans le repertoire lib de postgre. Ca ne change rien.

    Si ça inspire quelqu'un ????

    Cordialement,

  2. #2
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 83
    Points
    83
    Par défaut Note
    A propos du commentaire dans palloc.h :

    J'utilise DevCpp (Compilo Gcc) et donc __GNUC__ et définit.
    Si je mets la commande #define __GNUC__ alors le compilo m'indique que cette macro est déjà définit.
    Donc c'est bel et bien la version inline de MemoryContextSwithTo() qui est utilisée.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 83
    Points
    83
    Par défaut Note2
    Il semblerait que ce soit la variable CurrentMemoryContext qui fasse défaut.

    Ainsi dans le fichier palloc.h de PostGre, si je remplace la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /*
     * CurrentMemoryContext is the default allocation context for palloc().
     * We declare it here so that palloc() can be a macro.	Avoid accessing it
     * directly!  Instead, use MemoryContextSwitchTo() to change the setting.
     */
    extern DLLIMPORT MemoryContext CurrentMemoryContext;
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MemoryContext CurrentMemoryContext;
    ma dll compile, mais je n'ai pas pris le risque de tester le résultat.

    J'imagines (vu mes faibles compétence en ce domaine) qu'il me faut inclure une des dll des Postgre pour récupérer cette variable externe mais laquelle ?

    Cordialement,

    La solution (si elle existe) se trouve peut-être ailleurs encore...

  4. #4
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 83
    Points
    83
    Par défaut Début de solution
    "So what options does that leave all of us who need to compile and run our custom C functions in Windows? "

    Bonjour,

    après de nombreuses recherches sur le net j'ai trouvé ce lien :
    http://www.mydatabasesupport.com/for...oc-broken.html

    Il indique que le problème vient de la définition de la macro BUILDINGDLL lors de la création de la DLL user. Lorsque cette macro est définit alors dans les headers de postgres elle se "propage" et les variables externes (telles que CurrentMemoryContext) dont ont attend qu'elles soient importées sont en fait en mode export, d'où le problème de compilation.

    J'ai appliqué la méthode. La dll compile. Elle se charge correctement dans postgre mais elle me renvoie un message d'erreur sans plus d'indication lorsque je l'éxécute.

    Tout utilisateur Win32 cherchant à réaliser des fonctions C un peu complexe doit en passer par là. Si quelqu'un a réussi à appliquer la méthode je suis preneur de toute information supplémentaires.

    En attendant je vais tester de débugger comme je peux.

    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction Syms avec Matlab 2008 sous Windows 7
    Par b.lambert dans le forum MATLAB
    Réponses: 4
    Dernier message: 04/02/2010, 17h00
  2. Probleme d'affichage sous Windows Xp
    Par jderam dans le forum SDL
    Réponses: 8
    Dernier message: 11/06/2009, 15h32
  3. probleme script perl sous windows
    Par wirgilus dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2008, 11h34
  4. probleme chargement image sous windows
    Par coax81 dans le forum GTK+ avec C & C++
    Réponses: 15
    Dernier message: 13/07/2007, 20h52
  5. Probleme de démarrage sous windows 98
    Par Le Pharaon dans le forum Windows 2000/Me/98/95
    Réponses: 14
    Dernier message: 03/05/2005, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo