Visual Studio 解决方案:静态项目还是共享项目?

Posted

技术标签:

【中文标题】Visual Studio 解决方案:静态项目还是共享项目?【英文标题】:Visual Studio Solution: static or shared projects? 【发布时间】:2010-05-15 11:47:02 【问题描述】:

当整个项目(解决方案)由多个子项目 (.vcproj) 组成时,将它们绑定在一起的更好方法是:作为静态库还是作为共享库?

假设这些子项目没有在其他地方使用,共享库方法不应减少内存使用或加载时间。

【问题讨论】:

【参考方案1】:

意见:几乎在所有情况下都是静态的。

在 Windows 上的 C++ 中跨动态加载的库构建接口要困难得多。例如,与 Unix 共享对象不同,您不能对所有模块都使用标准单例,因为 DLL 将拥有自己的一组静态变量。

面向对象的接口通常很难从 DLL 中导出。

至于加载时间,rebase 等问题需要通过共享库来解决。

另一方面,您今天不共享的库将来可能会共享。但是,在大多数情况下,与依赖额外模块的代价相比,在 RAM 或磁盘映像中付出复制的代价要好。

【讨论】:

一个项目中不同的子模块,是的。用于多个项目,不适合动态。无论使用哪种方法,您都必须小心符号的实际结束位置

以上是关于Visual Studio 解决方案:静态项目还是共享项目?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 项目依赖问题 Visual Studio 2005

Visual Studio C++:在另一个项目中使用一个项目生成的静态库

用Visual Studio2017写静态库

并行构建 Visual Studio 解决方案会丢失一些静态库的 PDB

Visual Studio 2010 不会自动链接来自依赖项的项目中的静态库,因为它应该是

菜鸟进阶之:VC++之Visual Studio中DLL调用实现[静态嵌入]