簡體   English   中英

C ++動態發布庫和調試庫之間有什么區別?

[英]What's the difference between C++ dynamic Release library and Debug library?

我有一個與C ++動態庫有關的問題。 通常,C ++動態庫由.lib文件和.dll文件組成。 如果我理解的話,.lib文件會記錄導出函數的位置,而.dll包含實現。 我知道發布版本有一些優化,因此發布dll和調試dll應該是不同的。 那么發布lib文件和調試lib文件之間的主要區別是什么? 有沒有辦法告訴lib(或dll)文件是發布版本還是調試版本? 如果發布版本程序調用調試版本庫會發生什么? 謝謝!

請注意,“Release”和“Debug”只是一整套編譯器和鏈接器標志和設置的標簽,通常內部的“Release”構建仍會生成調試信息,但會有更高的優化設置。

因此,除非通過“d”后綴或庫的位置明確指示,否則沒有標准方法來判斷lib或DLL是“發布”還是“調試”版本。

當“發布”配置可執行文件調用“調試”配置庫時會發生什么情況取決於兩者之間不同的特定編譯和鏈接器設置。 幾乎在所有情況下,你都會遇到很多麻煩,有時甚至是非常明顯的,有時會更加隱蔽。 一些常見的麻煩來源:

  • 兩個庫都可能使用不同版本的運行時庫,並且可能具有某些變量的不同副本,這些變量應該是靜態的,並且在可執行文件中的所有庫中都是相同的,例如內存分配池及其計數器/哨兵。 一個症狀是你會得到奇怪的內存分配/釋放錯誤。

  • 這些庫可能在標准庫中采用不同的約定,例如安全設置或迭代器調試。 這將使“標准”容器的內存布局在庫中實際上不同,如果您不幸,或者如果您不幸,那么您將獲得訪問沖突。

暫無
暫無

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

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