我需要使用g ++內聯程序集中模板類成員的地址(作爲編譯時常量值)。有沒有可能表達這一點? (我認爲我需要修改名稱T<U>::x
)。g ++模板名稱mangling
template < typename U >
struct T {
static int x;
};
template < typename U >
void f() {
asm ("somecommand T<U>::x");
}
我需要使用g ++內聯程序集中模板類成員的地址(作爲編譯時常量值)。有沒有可能表達這一點? (我認爲我需要修改名稱T<U>::x
)。g ++模板名稱mangling
template < typename U >
struct T {
static int x;
};
template < typename U >
void f() {
asm ("somecommand T<U>::x");
}
假設你使用的是linux,你可以使用nm。
nm --demangle foo.o爲您提供符號的縮小名稱 nm --no-demangle foo.o爲您提供符號的改變名稱。
然後,您可以比較這兩個文件的輸出以將損壞的名稱與demangled名稱進行匹配。
我會使用objdump
從一個對象,它引用它(可以使用c++filt
在另一個方向去,但我知道,沒有獨立的程序給重整名稱中提取的重整名稱,你可以使用spec http://www.codesourcery.com/public/cxx-abi/abi.html,並創建一個mangler或手動進行mangling,但這可能是矯枉過正)。