Supprimer les noms de classe C ++ du fichier dll binary

J’ai un projet C ++ sous Visual Studio 2010 qui comstack dans une DLL. J’ai plusieurs classes privées spécifiques à une implémentation définies dans mon projet, par exemple CMyClass . Cette classe n’est pas exscope de la DLL ou par une fonction d’interface. Cependant, lorsque je vérifie le fichier dll généré, une chaîne “CMyClass” y est stockée. C’est une version release, et je ne veux pas que cette chaîne apparaisse dans le fichier dll. Cette DLL est livrée aux clients et je souhaite que tous les noms que j’ai utilisés dans mon projet soient supprimés du fichier DLL, afin que personne ne puisse obtenir un indice aussi simple sur les algorithmes que nous utilisons dans notre DLL.

J’utilise la configuration Release. Dans les propriétés du projet, l’option “Générer les informations de débogage” sous l’onglet “Éditeur de liens” est désactivée, le “Format d’informations de débogage” sous l’onglet C / C ++ est défini sur “Base de données de programmes (/ Zi)”. J’ai essayé de définir une chaîne vide pour “Format d’informations de débogage” sans succès.

La chaîne trouvée dans la dll ressemble à .?AVCMyClass@@ et se trouve à la toute fin du fichier dll. C’est la seule occurrence de la chaîne “CMyClass” dans le fichier dll. Cependant, cette chaîne est présentée pour presque toutes mes classes internes.

Comment se débarrasser de ces mentions?

Mettre à jour

S’il vous plaît noter, je ne veux pas obscurcir le code source lui-même. Le lien fourni n’est pas pertinent. Je ne vois aucune raison pour laquelle les noms de classe sont stockés dans le fichier dll. Je peux toujours renommer mes classes avant de construire, mais ce n’est pas une solution très simple.

Mise à jour2

Je ne suis pas d’accord avec la communauté sur la fermeture de cette question, puisqu’il ne s’agit pas d’un doublon. Et la réponse est donnée dans les commentaires de Tyler Gill . Merci à lui et honte aux autres.

Comme je suppose qu’un commentaire semble correct, j’en republie la réponse.

La chaîne du nom de la classe résulte de l’activation de RTTI (Informations de type à l’exécution) pour les fichiers binarys compilés. Lorsque RTTI est activé, le compilateur crée des objects qui stockent des informations sur les types compilés dans le binary, dont l’une des propriétés est le nom du type.

Notez que certaines utilisations de dynamic_cast et typeid nécessitent RTTI, par conséquent, la désactivation vous coûtera ces fonctionnalités de C ++.

Pour désactiver RTTI dans Visual Studio, utilisez le commutateur /GR- (voir http://msdn.microsoft.com/en-us/library/we6hfdy0(v=vs.100).aspx , tel que l’a posté Mikhail.)

Pour le désactiver dans GCC, utilisez le commutateur -fno-rtti .

Comme Tyler Gill l’a mentionné dans les commentaires, cette chaîne a été laissée par le compilateur à cause de RTTI puisque CMyClass hérite en fait d’ IMyClass et est polymorphe. Mon problème peut être facilement résolu en désactivant RTTI avec /GR- switch. Merci.