2010-11-30 75 views
2

嘿,我需要列出鏈接器輸出中列出的一些函數。語法我得到的是如下:將函數簽名從編譯器語言轉換爲C++

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

假作:

.text._ZN7funcsns3fooEidRNS_4TempE 

(你可能會從「未定義的符號」知道它和其他一些鏈接錯誤打印功能名稱)

現在,我可以寫一個腳本,以某種方式將它變成可讀的東西,但我想知道是否有一個智能這樣做。

請分享您的想法!
謝謝。

回答

7

使用GNU工具鏈的系統中,c++filt程序不正是你要尋找的一些信息。它是「binutils」包的一部分。不知道其他系統。

「.text。」不是重名的部分。運行c++filt _ZN7funcsns3fooEidRNS_4TempE產生funcsns::foo(int, double, funcsns::Temp&)

+0

噢FILT,哇;我前一段寫了一些使用`abi :: __ cxa_demangle`的東西;完全沒有意識到已經有了它 – 2010-11-30 15:12:33

2

如其他所示,c++filt是GNU工具鏈的一種選擇。

這也可以做programmaticaly(甚至從一個C程序):見abi::__cxa_demangle(這實際上是什麼c++filt做什麼)。

1

設置有視覺工作室(至少,我目前使用VC2005)的undname實用程序執行相同的C++爲Microsoft Visual C++