2010-11-03 75 views
3

我需要使用g ++內聯程序集中模板類成員的地址(作爲編譯時常量值)。有沒有可能表達這一點? (我認爲我需要修改名稱T<U>::x)。g ++模板名稱mangling

template < typename U > 
struct T { 
    static int x; 
}; 

template < typename U > 
void f() { 
    asm ("somecommand T<U>::x"); 
} 

回答

1

假設你使用的是linux,你可以使用nm。

nm --demangle foo.o爲您提供符號的縮小名稱 nm --no-demangle foo.o爲您提供符號的改變名稱。

然後,您可以比較這兩個文件的輸出以將損壞的名稱與demangled名稱進行匹配。

0

我會使用objdump從一個對象,它引用它(可以使用c++filt在另一個方向去,但我知道,沒有獨立的程序給重整名稱中提取的重整名稱,你可以使用spec http://www.codesourcery.com/public/cxx-abi/abi.html,並創建一個mangler或手動進行mangling,但這可能是矯枉過正)。