Bonjour

Me voici avec un problème qui touche plusieurs sujets. J'ai donc hésité à propos du sous-forum où poser ma question (Bases de données/Oracle/Interfaces de programmation ou C et C++/Outils pour C & C++/GCC/MinGW )

J'essaie depuis deux jours de programmer une routine C++ pour interroger une base de données Oracle. Mon environnement est :
Windows 7
IDE : Eclipse CDT
Compilo : gcc 8.3.0
toolchain : msys64 / MinGW-w64 64 bits

J'ai donc téléchargé l'Instant Client d'Oracle dans sa version 18.5 Light, ainsi que le SDK fournissant headers et Lib d'importation.

Premier problème : les bibliothèques fournies par Oracle pour Windows sont uniquement Visual Studio.
J'ai un peu bataillé pour retrouver l'outil gendef qui n'est plus sur le site sourceforge de MinGW-w64. J'ai pris celui de MinGW (Canal historique).
J'ai pu générer mon .def avec gendef, puis ma lib d'importation .a compatible MinGW avec dlltool.

Second problème : une fois la bibliothèque liée, gcc continue de m’assommer d'erreurs undefined reference to `oracle::occi::....
Il s'avère que les en-têtes du SDK ne contiennent aucune déclaration d'interface de la bibliothèque __declspec(dllimport)
Je ne suis pas très expérimenté dans l'utilisation de bibliothèques externes. Cela signifie-t-il qu'on ne peut utiliser que des liens statiques?

Troisième problème :
L'interface de la bibliothèque oraocci18.dll expose des classes et des fonctions C++ décorés à la façon MSVC. Ce qui se voit dans le fichier .def
Par exemple, la fonction de création de l'environnement Oracle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
oracle::occi::Environment * oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode,void *,void * (*)(void *,unsigned __int64),void * (*)(void *,void *,unsigned _int64),void (*)(void *,void *))
est décorée en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
?createEnvironment@Environment@occi@oracle@@SAPEAV123@W4Mode@123@PEAXP6APEAX1_K@ZP6APEAX112@ZP6AX11@Z@Z
Si je m'amuse à ajouter __declspec(dllimport) à la classe Environment, non seulement c'est du bricolage, mais MinGW cherche une fonction décorée différemment. Et j'ai l'erreur suivante
undefined reference to `__imp__ZN6oracle4occi11Environment17createEnvironmentENS1_4ModeEPvPFS3_S3_yEPFS3_S3_S3_yEPFvS3_S3_E'

Peut-on donc utiliser une dll compilée par MSVC avec MinGW grâce aux outils gendef et dlltool et la lier dynamiquement, est-on obligé de passer par une liaison statique ?