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 :
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 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
La fonction ErrorHandler fait appel à errcode() et errmsg() qui sont des fonctions définies dans :
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 "); }
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 !!
Partager