最近,我获得了一份在GNU/Linux和Unix中运行的C++服务器应用程序的开发工作,包括Solaris、Linux等等。由于我的公司正计划从头开始重写所有的东西,我正在考虑如何使用现代C++来开发它。
不幸的是,由于它具有封闭平台的特性,在客户端的机器中获得下降的libstdc++运行时似乎并不总是可能的。我知道libstdc++是向后兼容的,但我不得不针对GCC 3.4或4.2(以HP-UX为例)为目标,而他们(Unix提供者)的编译器是糟糕透了。
幸运的是,似乎有些人声称静态链接libstdc++是很好的是合法的,而有人则以技术的方式推荐它。然而,我不确定这样做是否安全(就法律和技术而言)。
将libstdc++静态链接起来是很有意义的吗?该产品为第三方开发人员提供可执行的和共享的库,并且不加载任何第三方共享库,而不是在系统的共享库中。
发布于 2017-02-16 23:35:06
我的50美分
我非常喜欢静态链接(特别是在Windows上),但代价是,如果有错误/安全问题,您必须重新发布您的产品或提供更新。我不愿意在Linux/Unix中这样做,因为通常在所有Unix操作系统上都没有二进制兼容性。如果您为目标系统进行编译,那么这并不重要(除了,您必须自己处理更新中的bug)。
就性能而言,共享库的加载开销很小,这在当今来说是可以忽略不计的。
在法律上,你很好(免责声明,我不是律师,你可能想咨询你公司的律师)。GNU在其运行时库中有一个异常:
源代码是在GNU通用公共许可证版本3下分发的,在第7节中添加了“GCC运行时库异常,版本3.1”中描述的异常,如下所示(或参见文件COPYING.RUNTIME)
如果不是这样的话,那么Linux上就再也不会有丙型产品了。
此外,如果您关心许可问题,您可能需要考虑使用Clang编译器。它有一个非常宽容的BSD许可证。既然你在从头开始重写东西。
https://stackoverflow.com/questions/42291693
复制相似问题