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 :

DLL pour postgreSQL avec MSVS : error LNK2019


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut DLL pour postgreSQL avec MSVS : error LNK2019
    Bonjour à tous,

    Je dois travailler sur le code d'une autre personne dont le but est de développer une DLL (fonctions et types externes en C) pour postgresql.
    Le soucis, c'est que je n'ai aucun contact avec la personne qui a écrit le code et je me démène à essayer de comprendre et compiler le code correctement.

    J'ai résolu les nombreuses erreurs que j'avais au départ en ajoutant tous les répertoires d'include. Mais mnt, j'ai de nouvelles erreurs que je ne parviens pas à corriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Génération de code en cours...
    Édition des liens en cours...
       Création de la bibliothèque MaLibrairie.lib et de l'objet MaLibrairie.lib.exp
    MonProjet.obj : error LNK2019: symbole externe non résolu "void __cdecl errfinish(int,...)" (?errfinish@@YAXHZZ) référencé dans la fonction __catch$_MaFonctionUn$0
    MonProjet.obj : error LNK2019: symbole externe non résolu "int __cdecl errcode(int)" (?errcode@@YAHH@Z) référencé dans la fonction __catch$MaFonctionUns$0
    MonProjet.obj : error LNK2019: symbole externe non résolu "int __cdecl errmsg(char const *,...)" (?errmsg@@YAHPBDZZ) référencé dans la fonction __catch$_MaFonctionUn$0
    MonProjet.obj : error LNK2019: symbole externe non résolu "bool __cdecl errstart(int,char const *,int,char const *,char const *)" (?errstart@@YA_NHPBDH00@Z) référencé dans la fonction __catch$_MaFonctionUns$0
    MonProjet.obj : error LNK2019: symbole externe non résolu "void * __cdecl MemoryContextAlloc(struct MemoryContextData *,unsigned int)" (?MemoryContextAlloc@@YAPAXPAUMemoryContextData@@I@Z) référencé dans la fonction _MaFonctionUn
    MonProjet.obj : error LNK2001: symbole externe non résolu "__declspec(dllimport) struct MemoryContextData * CurrentMemoryContext" (__imp_?CurrentMemoryContext@@3PAUMemoryContextData@@A)
    MonProjet.obj : error LNK2019: symbole externe non résolu "unsigned int __cdecl Float8GetDatum(double)" (?Float8GetDatum@@YAIN@Z) référencé dans la fonction _MaFonctionDeux
    MonProjet.obj : error LNK2019: symbole externe non résolu "void __cdecl pfree(void *)" (?pfree@@YAXPAX@Z) référencé dans la fonction _MaFonctionTrois
    MonProjet.obj : error LNK2019: symbole externe non résolu "int __cdecl pg_snprintf(char *,unsigned int,char const *,...)" (?pg_snprintf@@YAHPADIPBDZZ) référencé dans la fonction _MaFonctionTrois
    c:/MonProjet/MaLibrairie.dll : fatal error LNK1120: 9 externes non résolus
    Visiblement, voici les parties de mon code qui posent problème dans "MaFonctionUn" :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include "postgres.h"
    #include "stdafx.h"
    extern "C" {
      #include "fmgr.h"
      #include "funcapi.h"
      #include "libpq/pqformat.h"
      #include "elog.h"
      #include "executor/spi.h"
      #include "executor/executor.h"
      #include "lib/stringinfo.h"
      #include "miscadmin.h"
      #include "utils/builtins.h"
      #include "utils/guc.h"
      #include "utils/lsyscache.h"  
      #include "utils/geo_decls.h"
      #include <string.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <math.h>
      #include <windows.h>
      PG_MODULE_MAGIC ;
    }
    #undef select
    
    #define ErrorHandler(msg)\
    	catch(d_Error e)\
    	{\
    		ereport(ERROR,(errcode(e.get_kind()), errmsg(msg " : \"%s\"", e.what())));\
    	}
    
    (...)
    
    
    extern "C" {PG_FUNCTION_INFO_V1(MaFonctionUn) ;}
    Datum MaFonctionUn(PG_FUNCTION_ARGS)
    {
        (...)
    	ErrorHandler("MaFonctionUn ");
    }
    La fonction ErrorHandler fait appel à errcode() et errmsg() qui sont des fonctions définies dans :
    C:\Program Files\PostgreSQL\9.0\include\server\utils\elog.h

    Pourtant, j'ai bien ajouté le répertoire d'include... Le compilateur trouve bien le fichier elog.h mais je ne sais pas pourquoi ça plante.

    J'utilise MSVS 2008 et PostgreSQL 9.0

    Merci d'avance pour votre aide !!

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Il semblerait d'après les messages d'erreur qu'il manque la bibliothèque postgres.lib en entrée de l'édition de liens.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    Bonjour,

    J'avais bien ajouté la librairie... Voilà pourquoi je suis perplexe devant ces erreurs.

    EDIT : finalement, j'ai trouvé d'où venait les erreurs.
    J'ai mis en commentaire la ligne et j'ai fait entrer le dans le bloc D'après Wikipedia :
    Visual C++ will not compile anything before the in the source file.
    Et de toute manière, je pense que postgres.h est en C et que, donc, il y avait conflit C/C++.

    Par contre, mnt, j'ai les warnings suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning LNK4210: la section .CRT existe ; il se peut qu'il y ait des terminateurs ou des initialiseurs static non gérés
    J'espère que ça n'aura aucun impact sur la suite !

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

Discussions similaires

  1. Export DLL pour utilisation avec GetProcAddress
    Par squelos dans le forum Développement Windows
    Réponses: 2
    Dernier message: 07/10/2011, 11h21
  2. Développer une DLL pour postgresql.
    Par vaness7 dans le forum Extensions
    Réponses: 5
    Dernier message: 22/08/2011, 17h17
  3. DLL pour postgreSQL : erreur violation d'accès
    Par valda dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/02/2011, 13h27
  4. Error LNK2019 avec la SDL 1.2.9
    Par dude666 dans le forum MFC
    Réponses: 1
    Dernier message: 09/02/2006, 09h12
  5. Réponses: 4
    Dernier message: 23/04/2004, 16h06

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