Bonjour,
Je suis en train d'ecrire une couche de wrapping en C++ CLI pour faire de l'intérop entre du C++ natif et du C#. J'ai pu sans problème écrire mon code qui compile sans soucis en Debug, mais lorsque je passe la solution en mode release j'obtiens l'erreur de link suivante :
6>Frame.obj : fatal error LNK1237: during code generation, compiler introduced reference to symbol "public: virtual void __thiscall boost::detail::sp_counted_base::destroy(void)" (?destroy@sp_counted_base@detail@boost@@UAEXXZ) defined in module 'bblids.utils.misc.lib(Timer.obj)' compiled with /GL
J'en ai compris que mon code en C++ CLR appele une méthode de Boost dans le C++ natif dont le symbole n'existe plus car la passe d'optimisation sur le natif a surement décider d'inliner le corps de cette méthode.
Selon la doc je dois recompiler le fichier contenant le symbole supprimé avec l'option de link "/INCLUDE:nom_du_symbole_manquant". J'ai essayé avec les valeurs "public: virtual void __thiscall boost::detail::sp_counted_base::destroy(void)" et "boost::detail::sp_counted_base::destroy" mais je n'ai pas réussi à résoudre mon problème
La deuxième solution proposée par msdn est de désactiver le flag /GL d'optimisation ce qui n'est évidement pas envisageable, quelqu'un voit il mon erreur svp ? Est ce que j'interprete mal le message ?
Je met en piece jointe de ce post une partie du code C++ CLI générant l'erreur : le fichier "Frame.obj" est la source de mes problèmes (Frame.h et Frame.cpp) et le fichier WrapperSmartPtr.h contient la définition d'une classe pour wrapper un boost::shared_ptr dans du CLR. Je pense que le problème vient du fait que j'utilise justement dans un de ces fichiers une variable native sur le tas d'un type plus ou moins rattaché a Boost qui induit un appel au destructeur...
Deuxieme question, si personne ne voit pour la 1ere : existe t'il un logiciel comme ILDASM.EXE mais pouvant lire les fichiers .OBJ générés par visual studio de la meme maniere ?
Je vous remercie d'avance
Partager