![](/img/trans.png)
[英]How to force a DLL dependency even when no symbols are directly used by EXE?
[英]EXE and DLL dependency - When to recompile the EXE?
我在exe和dll中具有以下類定義。
// A.exe:
Class A { void fun() { B* b = new B(); b.funx(); }
// B.dll:
Class B { void funx (void) { C* y = new C(); y.funy(); }
Class C { void funy() { } }
可以說我更改了B類的大小,是否應該重新編譯A.exe? 即使更改C類的大小,我也應該重新編譯A.exe嗎?
如果更改B類的大小,則應重新編譯
如果B的大小沒有因更改C類的大小而改變,則無需重新編譯A。
看來,B不是從C繼承的,所以B的大小不會改變。
- 干杯
每次b.dll的公共接口發生更改時,您都必須重新編譯a.exe(不僅是大小,還包括對成員進行重新排序時的私有/公共更改[這也會影響成員的排序,而從源代碼中看不到)。 ..)。 如果C
是公共接口的一部分,那么每次C
更改時,您還需要重新編譯A.exe。 僅當C
是b.dll的私有類時才需要重新編譯a.exe,而a.exe卻沒有引用該私有類。 還要注意,例如當您的B::funx
是內聯函數時,可以間接引用C
,因為這樣C的實例化可以在A.exe的代碼中進行。
憑經驗,將C
的定義替換為聲明class C;
,並且仍然可以編譯A.exe,您無需關心C
但是我寧願建議每次都編譯A.exe,因為將來某時代碼更改,以致不滿足此條件,您將很難調試錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.