g ++ nome del modello storpiatura
-
28-09-2019 - |
Domanda
Ho bisogno di utilizzare l'indirizzo di un membro di una classe template in g ++ in linea di montaggio (come valore costante in fase di compilazione). E 'possibile esprimere questo? (Penso che ho bisogno il nome storpiato di T<U>::x
).
template < typename U >
struct T {
static int x;
};
template < typename U >
void f () {
asm ("somecommand T<U>::x");
}
Soluzione
Supponendo che si sta usando Linux, è possibile utilizzare nm.
nm --demangle foo.o ti dà i nomi demangled per i simboli foo.o nm --no-demangle ti dà i nomi alterati per i simboli.
Quindi è possibile confrontare l'output di questi 2 file per abbinare il nome storpiato il nome demangled.
Altri suggerimenti
userei objdump
per estrarre il nome storpiato da un oggetto quali sono le referenze (è possibile utilizzare c++filt
ad andare nella direzione opposta, ma non conosco nessun programma autonomo dando il nome storpiato, si potrebbe utilizzare la specifica http://www.codesourcery.com/public/cxx-abi/abi.html e crea un mangler o fare il mangling manualmente, ma questo è probabilmente eccessivo).