c++ - 将 libstdc++ 静态链接是一个好习惯吗?

标签 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 是否有意义?该产品为第三方开发者提供了可执行文件和共享库,并且不会加载任何非系统共享库。

最佳答案

我的 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/

相关文章:

c++ - 如果条件在 C/C++ 中成立,如何自动设置一个值?

MySQL "sending data"事件需要更长的时间

linux - 无法使用 while 修改 bash 脚本 case 语句中的变量

c++ - 使用 grep 命令一个 .hpp 文件获得匹配的二进制文件

linux - 如何在unix/linux中调用FTP文件内的变量

c++ - 如何使这个运算符(operator)调用明确?

c++ - 模板类中 `is_base_of` 的静态断言因 MSVC 中的意外类型而失败

c++ - “strcasecmp”未在此范围内声明

php - 如何在 linux 上设置正确的 php 版本

linux - 访问控制列表 (ACL) 何时出现在 Unix/Linux 上?