假设你有两个dll
Dll A和Dll B
它们都静态链接到静态库(即.lib文件)。我们称之为L库。
我知道L完全链接到A和B,分别有效地创建LA和LB.但是,当来自洛杉矶的对象O从A传递到B时会发生什么?我假设在A LA代码中执行,而在B LB代码中执行,因为这是如何发生链接的。如果在A中创建O,卸载A,然后在B中使用O,会发生什么不好的事情?
答案 0 :(得分:5)
静态库只是目标文件的集合。当您与静态库链接时,一切都会发生,就像静态库的代码已经包含在您的代码中一样。
因此,如果静态库中存在全局变量,则每个DLL都将获得自己的副本,这可能是您想要的也可能不是。
答案 1 :(得分:2)
然而,当来自洛杉矶的对象O从A传递到B时会发生什么?
这实际上取决于O
对象是什么以及库L
对它做了什么。如果O
是一个完全依赖于该对象中存储的状态的对象,那么一切都可能没问题。但是,如果O
不是O
,如果O
取决于全局状态或某个其他对象的状态,则可能会出现问题。
避免问题的最佳方法是在两个DLL之间保持适当的绝缘层。也就是说,你不应该在两者之间传递O
,因为他们不是在谈论同一个L
。一般来说,如果{{1}}大到足以要求你在两个用户之间传递它的对象,那么它足够大,你可能应该考虑动态链接到它。