链接libstdc ++ static是一种很好的做法吗?

时间:2017-02-17 07:18:33

标签: c++ linux unix libstdc++

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

不幸的是,由于它具有封闭平台性质,似乎并不总是可以在客户端的机器中获得下降libstdc ++运行时。我知道libstdc ++是向后兼容的,但是我必须针对GCC 3.4或4.2(在HP-UX的情况下),并且他们(Unix提供者)的编译器是sucks

幸运的是,似乎有些人在法律事务中声称linking libstdc++ statically is fine,并且 someone以技术方式推荐它。但是,我不确定这样做是否安全(在法律和技术方面)。

是否可以链接libstdc ++ static?此产品为第三方开发人员提供可执行和共享库,并且不会加载任何第三方共享库,而不是加载到系统的第三方共享库。

1 个答案:

答案 0 :(得分:1)

我的50美分:

我非常喜欢静态链接(尤其是在Windows上),但价格是,如果存在错误/安全问题,您必须重新发送产品或提供更新。我不愿意在Linux / Unix中这样做,因为你通常没有所有Unix操作系统的二进制兼容性。如果您为目标系统进行编译,则无关紧要(除此之外,您必须自行处理有关更新的错误)。

性能方面,共享库在加载库时只需要很少的开销,现在可以忽略不计。

从法律上讲,你没事(免责声明,我不是律师,你可能想咨询你公司的律师)。 GNU的运行时库上有exception

  

源代码在GNU通用公共许可证下分发   版本3,在所述例外的第7节下添加   在“GCC运行时库异常,版本3.1”中如下(或参见   文件COPYING.RUNTIME)

如果情况并非如此,那么Linux上就不会有任何专有产品。

如果您担心许可,也可以考虑使用Clang编译器。它有一个very tolerant BSD license。好吧,因为你从头开始重写东西。