最近,我获得了开发在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从技术 Angular 推荐它。但是,我不确定这样做(在法律和技术上)是否安全。

链接libstdc++静态是否有意义?该产品为第三方开发人员提供可执行文件和共享库,并且不会加载任何不在系统中的第三方共享库。

最佳答案

我的50美分:

我非常喜欢静态链接(尤其是在Windows上),但是这样做的代价是,万一出现bug/安全问题,您必须重新发货或提供更新。我不愿意在Linux/Unix中这样做,因为您通常不对所有Unix操作系统都具有二进制兼容性。如果您为目标系统进行编译,则没关系(再次,除非您必须自己通过更新来解决错误)。

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

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



如果不是这种情况,那么在Linux上将不会有任何专有产品。

此外,如果您担心许可问题,则可能要考虑使用Clang编译器。它有一个very tolerant BSD license。好吧,因为您是从头开始重写内容。

关于c++ - 链接libstdc++ static是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42291693/

10-13 09:46