我最近得到了一个职位,负责开发在 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 是否有意义?该产品为第三方开发者提供了可执行文件和共享库,并且不会加载任何非系统共享库。
最佳答案
我的 50 美分:
我非常喜欢静态链接(尤其是在 Windows 上),但代价是,如果出现错误/安全问题,您必须重新发布您的产品或提供更新。我不愿意在 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 。好吧,既然你是从头开始重写东西。
关于c++ - 将 libstdc++ 静态链接是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42291693/