【发布时间】:2009-09-23 13:53:03
【问题描述】:
我不会详细介绍“媒体播放器”部分,除非它显然会使用插件,这将是一个在运行时加载的简单动态库。现在,我可以将这些插件动态链接到它们的依赖项,或者我可以静态链接它们。两者都有其优点和缺点 - 我在这里不计算 Linux,因为它将使用共享库。
我看到使用共享库的唯一优势是库可以独立于程序进行更新。在 Windows 上,这很少是一个优势,因为该库将在使用它的应用程序旁边(感谢没有官方的 C++ ABI)。在 Windows 上,为了帮助减少 DLL 地狱并共享 C 库,我将不得不使用 SxS,这不是一个非常好的公民。
对于静态库,我看到了一大优势:链接时优化。 ICC 和 VC++ 已经支持它们很长一段时间了,GCC 也为它们提供了一个分支。由于我可能会在 Windows 上使用 VC++,因此编译器(嗯,实际的“编译器”只是将 C++ 转换为中间语言,所以这里的编译器是“链接器”)对代码并且可以通过这种方式优化很多东西。这是我倾向于的选项。
我的问题是,在我的具体案例中,哪一个是最好的?
没有其他应用程序使用它们的问题,因为在这个问题中我不计算 Linux(尽管我不了解 OS X)或多个实例(谁运行同一个媒体播放器两次?),二进制兼容性(因为我将随应用程序分发所有内容)或易于更新(在 Windows 上,我将使用非常高效的二进制差异修补程序来分发更新)。
【问题讨论】:
标签: static media-player shared