簡體   English   中英

打印c ++名稱mangling

[英]printing the c++ name mangling

我正在閱讀一本c ++書,其中指出鏈接器通常是通過錯誤的名稱而不是原始名稱。 所以,我試圖看看有哪些受損的名字會是什么樣子。 因此,我創建了一個名為Test的類,它只包含函數簽名並將其保存到名為name_mangling.cpp的文件中

然后在main方法中,我調用這些函數。 我首先將文件編譯為.o,然后嘗試將其與命令鏈接

g++ -o name_mangling name_mangling.o

我希望看到錯誤的名字,但g ++打印的實際名稱,如

undefined reference to `Test::Test(char const*)'

但另一方面,當我嘗試鏈接到共享對象(如.so)時,我看到了錯誤的名稱。 為什么g ++在.so的情況下打印出受損的名稱,而不是上述情況?

它不會顯示受損的名稱,因為它知道用代碼編寫的實際/真實名稱。 考慮到你可能只有一些拼寫錯誤的名字(顯示錯誤的名字更難處理),顯示錯位的名稱會適得其反。

如前所述,在Linux / GCC下,有“nm”工具可以打印受損的名稱。 在Windows下,您可以嘗試使用Dependency Walker ,它曾經是Visual C ++示例的一部分,對於確保啟動時需要所有動態鏈接庫也非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM