2010-11-30 24 views
2

皆さん、リンカの出力にリストされているいくつかの関数のリストを作成する必要があります。次のように私が得る構文は次のとおりです。コンパイラ言語からC++への関数シグニチャの変換

.text._ZN7funcsns3fooEidRNS_4TempE 

(あなたは「未定義のシンボル」と関数名を印刷する他のいくつかのリンクエラーからそれを知っているかもしれません)

int foo(int num,double dnum, Temp & temp) (in namespace "funcsns") 

は変身します

今、私は何とかそれを何か可読なものに変えるスクリプトを書くことができますが、スマートのやり方があるのだろうかと思います。

あなたのアイデアをご紹介ください!
ありがとうございました。

答えて

7

様々なコンパイラのためにどのように機能するかについていくつかの情報があり、c++filtプログラムは、あなたが探しているまさにありません。これは "binutils"パッケージの一部です。他のシステムについてはDunno。

".text。"その名前の一部ではありません。 c++filt _ZN7funcsns3fooEidRNS_4TempEを実行すると、funcsns::foo(int, double, funcsns::Temp&)が得られます。

+0

ああのためのC++ filtのと同じこと。私は 'abi :: __ cxa_demangle'を使っていました。完全にそれのために何かがあったことを認識していなかった –

+0

あなたは天才です! – stnr

3

これは装飾または名前のマングリングと呼ばれます。ここでは、GNUツールチェーンを使用したシステムで

http://www.kegel.com/mangle.html

2

他に表示されているように、c++filtはGNUツールチェーンの道です。

programmaticaly(Cプログラムからも):abi::__cxa_demangle(これは実際にはc++filtと同じです)を実行することもできます。 Visual Studioの(私は現在使用している少なくともVC2005)が設けられて

1

undnameユーティリティはすごい、のMicrosoft Visual C++

関連する問題