[英]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.