我有一個與C++動態庫有關的問題。通常C++動態庫由.lib文件和.dll文件組成。如果我理解的很好,.lib文件會記錄導出的函數的位置,而.dll則包含實現。我知道發佈版本有一些優化,因此發佈DLL和調試DLL應該是不同的。那麼發佈lib文件和調試lib文件的主要區別是什麼?有沒有辦法告訴lib(或dll)文件是發佈版本還是調試版本?如果發佈版本程序調用調試版本庫,會發生什麼情況?謝謝!C++動態發佈庫和調試庫之間有什麼區別?
3
A
回答
7
請注意,「發佈」和「調試」只是一整套編譯器和鏈接器標誌和設置的標籤,通常內部「發佈」版本仍會生成調試信息,但會有更高的優化設置。
因此,沒有標準的方式來判斷一個庫或DLL是否是「釋放」或「調試」版本,除非它明確地由類似於「d」後綴或庫的位置表示。
當「釋放」配置可執行文件調用「調試」配置庫時,會發生什麼情況取決於兩者之間的具體編譯和鏈接器設置。在幾乎所有情況下,你都會遇到很多麻煩,有時候會非常公然,有時會更加陰險。
這兩個庫都可能使用不同版本的運行時庫的是,也有應該是靜態的,在所有的庫在同某些變量的不同副本:麻煩一些常見的來源一個可執行文件,如內存分配池及其計數器/標記。一個症狀是你會得到奇怪的內存分配/釋放錯誤。
這些庫可能在標準庫中採用不同的約定,例如安全設置或迭代器調試。這會使「標準」容器的內存佈局在不同的庫中實際上不同,如果你幸運或者不可預知的行爲,那麼你將會遇到訪問違規。
相關問題
- 1. 靜態庫和動態庫之間有什麼區別
- 2. 調試和發佈之間的區別
- 3. 靜態鏈接庫和動態鏈接庫之間的區別是什麼
- 4. Windows遊戲庫和類庫之間有什麼區別?
- 5. C和%之間有什麼區別?
- 6. Objective-C中布爾和布爾之間有什麼區別嗎?
- 7. XCode中的C/C++庫和STL C++庫有什麼區別?
- 8. Flex庫和ActionScript庫有什麼區別?
- 9. .NET中「調試」和「發佈」版本之間的主要區別是什麼?
- 10. 「C系統調用」和「C庫例程」有什麼區別?
- 11. ScriptManagers的ScriptMode中調試和發佈有什麼區別?
- 12. Xcode/Cocoa:調試和發佈版本有什麼區別?
- 13. Qt調試版本和Qt發佈版本有什麼區別?
- 14. 歷史學家和數據倉庫之間有什麼區別?
- 15. JavaScript框架和庫之間有什麼區別?
- 16. 控制器和codeigniter庫之間有什麼區別?
- 17. Microsoft.Spatial和System.Spatial庫之間有什麼區別
- 18. 設計模式和庫之間有什麼區別?
- 19. IMPORTED目標和INTERFACE庫之間有什麼區別?
- 20. MySQL數據庫中TABLE和VIEW之間有什麼區別?
- 21. 動態綁定與動態綁定之間有什麼區別Objective C C
- 22. C#測試項目和C#類庫之間的區別項目
- 23. 標準MBean和動態MBean之間有什麼區別?
- 24. Cocoa框架和C靜態庫有什麼區別?
- 25. Xcode調試和發佈之間的區別
- 26. 調試和發佈文件夾之間的區別
- 27. OpenMP中的靜態和動態調度之間的區別C
- 28. C標準庫和C POSIX庫之間的區別
- 29. 發佈和迭代有什麼區別?
- 30. 用戶控制庫和自定義控制庫之間有什麼區別?
這似乎更多的是關於一些平臺的動態庫的實現,而不是關於C++。 –
調試版本的內存分配器可能不同,跟蹤更改並可能在元數據前綴內存。混合分配器「不小心」最多會泄漏,並且很可能會導致程序崩潰。 – ixe013
恰好當您在調試應用程序中使用發佈dll或在發佈應用程序中使用調試dll時,您可能會發生奇怪的崩潰,主要是因爲發佈和調試之間的內存分配api不同。 – drescherjm