Je programme une application qui doit pouvoir charger des plugins dynamiquement via des librairies DLL. J'avais jusque là fait mes classes etc... directement pour l'exécutable. Mais quand j'ai commencé à faire la partie pour les plugin, je me suis aperçu que les plugins devaient pouvoir accéder à des classes utilisées par mon programme.
Pour ne pas que les plugins aient à ré-inclure chacun le même code de sort qu'ils pèsent 300Mo chacun, j'ai fait une DLL avec les fichiers sources de mon programme (je n'ai gardé que le main en fait), pour que la DLL puisse être utilisée par les plugins et ainsi alléger leur taille.
Seulement, depuis que j'utilise la DLL, alors que le code est STRICTEMENT INCHANGE, et que le linkage est fait au moment de la compilation (sans utiliser LoadLibrary etc...), j'obtiens un signal segfault lors de l'exécution de mon programme.
En passant le déboggeur, j'ai le message d'erreur suivant :
"#0 0x100a09f3 std::string::c_str (??:??)
#1 0x0040c399 main (??:??)
"
sans avoir ni la ligne ni même le module qui a provoqué l'erreur...ce qui n'est pas particulièrement explicite...
Je ne sais pas si ça influe, mais ma dll utilise d'autres DLL, toujours avec un linkage à la compilation.
Si quelqu'un a une idée...
__________________________
Lorsque touts les arbres auront été coupés, Lorsque touts les animaux auront été chassés, Lorsque touts les poissons auront été pêchés;
Alors l'homme découvrira que l'argent ne se mange pas.
------ |_o/e _|a/a---------
Finalement j'ai résolu le problème, mais ça reste assez bizarre ! Cela venait du fait que j'utilisais une classe qui était également dans la DLL, mais au lieu d'importer celle-ci, j'en avais une propre définition avec des fonctions template (ce qui était impossible dans la DLL, d'où la non-utilisation de celle de la DLL) dans mon programme.
En renommant la classe et en changeant quelques truc, rien n'y fait : j'ai bel et bien été obligé d'utiliser la classe contenue dans la DLL, et là seulement il n'y a plus eut d'erreur. Ca marche mais je n'ai toujours pas trouvé d'explication...(surtout après renommage de la classe considérée)
__________________________
Lorsque touts les arbres auront été coupés, Lorsque touts les animaux auront été chassés, Lorsque touts les poissons auront été pêchés;
Alors l'homme découvrira que l'argent ne se mange pas.
------ |_o/e _|a/a---------
c'est ce que je pensais au début, mais en réfléchissant ça m'étonnerait que la STL soit boguée...à savoir que j'utilisais les string de façon tout à fait normale et simple, sans accès direct aux données (genre chaine[30]) ou autres lubies qui auraient pu créer une segfault...
et puis en cherchant sur internet j'ai trouvé d'autres personnes qui avaient eu le même problème (conflict de nom) et dont le compilateur signalait également l'erreur sur la classe string
enfin bon ^^ en tout cas maintenant ça marche impec (c'était pour le projet hughobot d'ailleurs ) donc ça n'a plus vraiment d'importance, mais bon, toujours une petite curiosité pour les erreurs résolues en pratique mais non en théorie...
__________________________
Lorsque touts les arbres auront été coupés, Lorsque touts les animaux auront été chassés, Lorsque touts les poissons auront été pêchés;
Alors l'homme découvrira que l'argent ne se mange pas.
------ |_o/e _|a/a---------