[英]Constructor / Destructor Linking Error
我有一個項目(創建一個DLL),比如說test.dll,我沒有在dll中輸出類的構造函數和析構函數,比如TestClass。 這是因為我有一些工廠函數應該被調用來創建和銷毀TestClass的對象。 這個設計在我創建的獨立示例中完美地運行,我嘗試使用test.dll中的TestClass對象。
但是,當我將這個test.dll(或者我的情況下的.lib,因為我使用Visual Studio)鏈接到我們的生產模塊中的項目時,我得到奇怪的鏈接錯誤指向它無法為TestClass找到的構造函數和析構函數。 我知道我不會調用new / delete,或者在項目的任何地方創建任何TestClass的堆棧實例。 我認為生產模塊使用C#/ CLR / CLI和C ++。 解決方法的唯一方法是為我導出TestClass的構造函數和析構函數。 這在設計上是不合需要的。
這種情況對任何人都很熟悉嗎? 有人可以指出可能存在的問題嗎?
這是我得到的錯誤:
Error 5264 error LNK2028: unresolved token (0A000BA3) "public: virtual __thiscall BE::TestClass::~TestClass(void)" (??1TestClass@BE@@$$FUAE@XZ) referenced in function "public: virtual void * __thiscall BE::TestClass::`vector deleting destructor'(unsigned int)" (??_ETestClass@BE@@$$FUAEPAXI@Z) AMBestDetailBridge.obj BEBase
Error 5373 error LNK2001: unresolved external symbol "public: virtual __thiscall BE::TestClass::~TestClass(void)" (??1TestClass@BE@@$$FUAE@XZ) AMBestDetailBridge.obj BEBase
謝謝!
鏈接錯誤說你通過delete []調用析構函數,所以很可能在你的生產模塊中,你有一些代碼:
TestClass* pTest = ...
delete pTest;
TestClass* pTestArray = ...
delete[] pTest;
當然,在智能指針的情況下,它可能不是那么明顯:
SmartPtr<TestClass> spTest = ...
// delete called automatically when out of scope.
在一個模塊中分配並在另一個模塊中刪除會使自己處於潛在風險中 - 因為2個模塊可能使用不同的堆進行內存分配(比如重新定義新的運算符),幸運的是這個問題在鏈接時暴露,而不是在運行時暴露。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.