g nom du modèle de la mangling
-
28-09-2019 - |
Question
I besoin d'utiliser l'adresse d'un membre d'une catégorie de modèle en g ++ assembleur en ligne (comme une valeur de constante de temps de compilation). Est-il possible d'exprimer? (Je pense que je dois le nom de mutilée T<U>::x
).
template < typename U >
struct T {
static int x;
};
template < typename U >
void f () {
asm ("somecommand T<U>::x");
}
La solution
En supposant que vous utilisez Linux, vous pouvez utiliser nm.
nm --demangle foo.o vous donne les noms demangled pour vos symboles nm --no-demangle foo.o vous donne les noms tronqués pour vos symboles.
Ensuite, vous pouvez comparer la sortie de ces 2 fichiers de faire correspondre le nom mutilée au nom demangled.
Autres conseils
J'utiliser objdump
pour extraire le nom estropié d'un objet références (vous pouvez utiliser c++filt
pour aller dans l'autre sens, mais je ne connais pas de programme autonome donnant le nom mutilée, vous pouvez utiliser la spécification http://www.codesourcery.com/public/cxx-abi/abi.html et crée un mangler ou faire le mutiler manuellement, mais c'est probablement exagéré).