link libstdc++ static 是一个好习惯吗?

Is it a good practices to link libstdc++ static?

我最近得到了一个职位,负责在 GNU/Linux 和 Unix(包括 Solaris、HP-UX 等)中开发 C++ 服务器应用程序 运行。由于我的公司计划从头开始重写所有内容,我正在考虑如何使用现代 C++ 进行开发。

不幸的是,由于它的封闭平台性质,似乎并不总是能够在客户端机器上获得下降的 libstdc++ 运行时。我知道 libstdc++ 是向后兼容的,但是很糟糕,我必须以 GCC 3.4 或 4.2(在 HP-UX 的情况下)为目标,并且他们(Unix 提供商)的编译器是 sucks.

幸运的是,似乎有些人声称 linking libstdc++ statically is fine 在某种意义上是合法的,并且 someone从技术角度推荐。但是,我不确定这样做是否安全(在法律和技术方面)。

link libstdc++ 静态是否有意义?本产品为第三方开发者提供可执行和共享库,不加载系统自带的第三方共享库。

我的 50 美分:

我非常喜欢静态链接(尤其是在 Windows 上),但代价是万一出现 bugs/security 问题,您必须 re-ship产品或提供更新。我不愿意在 Linux/Unix 中这样做,因为您通常无法在所有 Unix 操作系统上实现二进制兼容性。如果您为目标系统编译,那没关系(除了,再一次,您必须自己处理更新中的错误)。

在性能方面,共享库加载库的开销很小,现在可以忽略不计了。

法律上,你没问题(免责声明,我不是律师,你可能要咨询你公司的律师)。 GNU 在其运行时库中有一个 exception

The source code is distributed under the GNU General Public License version 3, with the addition under section 7 of an exception described in the “GCC Runtime Library Exception, version 3.1” as follows (or see the file COPYING.RUNTIME)

如果不是这样,那么 Linux 上就不会提供专有产品。

另外,如果您担心许可问题,您可能需要考虑使用 Clang 编译器。它有一个very tolerant BSD license。好吧,既然你是从头开始重写东西。