簡體   English   中英

構造函數/析構函數鏈接錯誤

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

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