Chargement dynamique de DLL sous Unix
Bonjour
Je mets en place un environnement multi-SGBD supposé s'interfacer avec le bon client SGBD en fonction d'un fichier de config
J'ai donc une DLL qui utilise soit les services de ma DLL Sybase (qui utilise un client Sybase) soit les services de ma DLL Oracle (qui utilise un client Oracle)
Je souhaite donc que ne soit chargée que la DLL correspondant au contexte SGBD afin de ne pas avoir d'erreur de lien non résolu (avec le clien SGBD) pour l'environnement SGBD non utilisé qui m'obligerait à avoir une DLL bouchon avec les risque de boulettes qui l'accompagne en termes de livraison client
Je voudrais donc mettre en oeuvre un chargement de librairie en dynamique en C sous Unix ? J'aimerais que mon traitement ne charge une dll que lorsqu'il en a besoin et surtout pas avant... Typiquement il s'agit de charger le client Oracle ou le client Sybase mais jamais les deux...
En l'état mon makefile comporte une ligne du type : cc -G -brtl -blazy ...... mais cela ne semble pas toujours suffisant ....
Help me please
D'avance merci
Willou
Chargement dynamique de DLL C sous Unix
En fait j'ai une DLL pour faire simple qui s'appelle SQL et qui fait office d'interface. J'ai ensuite une DLL qui s'appelle SYB et une ORA et chacune contient des ordres spécifiques d'accès à mon SGBD
Dans mes traitements, j'utilise par ex. une T_SQL_EXECPROCSTOCK qui se trouve dans SQL et qui invoque la fonction T_SYB_EXECPROCSTOCK ou la T_ORA_EXECPROCSTOCK selon que la propriété TYPE_SGBD de mon fichier INI vaut SYBASE ou ORACLE
Etant donné que ma SQL est linkée avec ma SYB et ma ORA, elles mêmes linkées avec des services de leur client respectif, au chargement de ma SQL il y a chargement de ma ORA et de ma SYB avec résolution des lients avec les clients qui vont bien
Si celà ne me pose pas de pb vu que j'ai les deux, mes clients eux n'ont que l'un des SGBD et donc je voudrais que les DLL SYB et ORA ne soient chargées que lorsqu'on invoque un de leurs services. Etant donné que pour un client sous SYBASE ma SQL ne redirigera que vers la DLL SYB, il ne cherchera pas à charger la ORA et je n'aurai pas de lien non résolu
J'avais cru comprendre que l'option LAZY de CC permettait de conditionner le chargement d'une DLL à son utilisation effective mais celà ne semble pas super bien marcher
Merci
Chargement dyn de DLL sous Unix
Je ne peux pas charger les deux car mes SYB et ORA utilisant des services client Sybase ou Oracle, celà obligerait mes clients à avoir un runtime Sybase et un Oracle
Je ne veux pas non plus linker avec l'une ou l'autre car on doit déjà gérer la livraison des binaires pour AIX, SUN... et on ne veux pas rajouter une dimension à la gestion paralèlle des livraisons (AIX/ORA, AIX/SYB, SUN/ORA...) car à coup sûr une fois sur deux on livrera une mauvaise version à qqu'un
Je linke effectivement ma SQL avec ma SYB et ma ORA mais j'ai lu qu'il était possible au chargement d'un programme de ne charger une DLL que lorsqu'on cherchait à s'en servir. Comme chez un client donné, le fichier INI fera que ma SQL ne cherchera à utiliser que les services SYB (par ex.), il ne chargera pas la ORA et donc ne gueulera pas parce que mon client n'a pas de client (SGBD) ORA
U6 Watt Aïl Mine ? :roll:
Chargement DLL dynamique sous Unix (suite et fin)
Nous avons effectivement pu résoudre notre pb avec DLOPEN et DLSYM
Maintenant C tout bon, mon interface SQL (qui pourrait effectivement être vue comme un driver ODBC) ne cherche pas à charger un runtime ORACLE quand elle est en environnement SYBASE et vice et versa
Merci à tous pour vos précieux conseils :wink: