在当前 Linux 发行版上打包 C++11 软件是不是安全?

     2023-02-24     50

关键词:

【中文标题】在当前 Linux 发行版上打包 C++11 软件是不是安全?【英文标题】:Is it safe to package C++11 software on current Linux distributions?在当前 Linux 发行版上打包 C++11 软件是否安全? 【发布时间】:2015-01-29 20:02:45 【问题描述】:

作为 Linux 发行版的下游维护者,我通常维护的一些包开始在其代码库中使用 C++11 功能。它们都依赖于 Linux 发行版打包的不同库。

Problems with the ABI 可能在将 C++11 代码与 C++98 和 AFAIK 混合时出现,当前大多数主要 Linux 发行版在编译软件生成包时默认不启用 C++11 标志。

问题是:主要的 Linux 发行版是如何处理 C++11 代码的输入的?在使用系统库时,是否有适当的方法来检查或避免 ABI 的这些问题?

谢谢。

【问题讨论】:

您能否提供有关“当前大多数主要 Linux 发行版都未启用 C++11 标志”的参考? 你在混合 g++ 版本吗?如果不是,我相信这个问题在 GCC 4.8 中已修复 @Mgetz 4.8.1 仍然至少提到了一个问题,而 4.8.2 提到了一些非常小的问题。 @Puppy 你看到 Yakk 提到的例子了吗?也许您应该要求它,而不是因为“没有必要”而称其为 BS。没有什么是必要的。然而它被允许发生。 (在实践层面上存在现实。无论标准是否愿意) 假设只有那个“意外”。由于没有管理 ABI 和 ABI 互操作性的标准,我不确定如何给出权威答案。我很确定它需要的不仅仅是“编译器开发人员永远不会那样做,不是吗?!” 【参考方案1】:

除了 C++11 可以激发二进制更改之外,该问题与 C++11 与 C++98 无关。由 C++11 推动的二进制更改并没有什么特别之处。它们与常规二进制更改一样具有破坏性或非破坏性。此外,只有在库维护者特别选择更改其二进制接口时,它们才会更改。

换句话说,这与标准版本无关,与库有关,除非库明确选择为不同的标准版本提供两个不同的二进制接口(这仍然是库的选择)。除了这种情况,你在 C++98 中和在 C++11 中一样坏。 Itanium 在支持 C++11 的版本和支持 C++98 的版本之间向后兼容,因此不会损坏编译器 ABI。

从记忆中,除非你使用的是 4.7.0,他们为了好玩而破坏了它然后再破坏,你使用 libstdc++ 是非常安全的——当他们可以做出重大突破时,他们正在为未来的版本存储 ABI 破坏。

换句话说,虽然向 C++11 的过渡期可能会带来额外的动机来破坏 ABI,从而带来额外的风险,但实际上使用 C++11 本身并不会带来任何额外的风险。

【讨论】:

xdg-open 默认在每个 linux 发行版上都可用吗?

】xdg-open默认在每个linux发行版上都可用吗?【英文标题】:Isxdg-openbydefaultavailableoneverylinuxdistribution?【发布时间】:2015-01-0920:39:44【问题描述】:我正在编写一个C++程序,我想在其中打开用户的默认浏览器。对于Linux,我发现我... 查看详情

如何编译(构建)我的 Qt 应用程序以在许多 Linux 发行版上运行?

】如何编译(构建)我的Qt应用程序以在许多Linux发行版上运行?【英文标题】:Howtocompile(build)myQtapplicationtorunonmanylinuxdistributions?【发布时间】:2010-07-1909:00:20【问题描述】:我创建了一个QtGUI应用程序,我想提供一个在尽可能... 查看详情

如何在亚马逊 Linux 发行版上安装 nginx 1.9.15

】如何在亚马逊Linux发行版上安装nginx1.9.15【英文标题】:Howtoinstallnginx1.9.15onamazonlinuxdisto【发布时间】:2016-09-0202:51:18【问题描述】:我尝试在全新的amazonlinux上安装最新版本的nginx(>=1.9.5)以使用http2。我按照此处描述的说明进... 查看详情

相同的 shell 脚本在不同的 Linux 发行版上具有不同的行为

】相同的shell脚本在不同的Linux发行版上具有不同的行为【英文标题】:SameshellscripthasdifferentbehaviourondifferentLinuxdistributions【发布时间】:2013-08-0702:12:30【问题描述】:我只是简单地编写了一个shell脚本来让我轻松地编译我的代码... 查看详情

sh强制在ubuntu和其他linux发行版上启用颜色提示的脚本。(代码片段)

查看详情

我的朋友无法在他的 linux 发行版上运行我的 openGL 程序

】我的朋友无法在他的linux发行版上运行我的openGL程序【英文标题】:Myfriendcan\'trunmyopenGLprogramonhislinuxdistro【发布时间】:2012-02-1501:18:53【问题描述】:我正在ubuntu上编写一个opengl应用程序,它正在编译和运行良好。但是当我将... 查看详情

rabbitmq快速入门(代码片段)

...务使用高可用的RabbitMQ服务1.1安装RabbitMQ对于Ubuntu和Debian发行版RabbitMQ已经有可用的软件安装包:apt-getinstallrabbitmq-serverrabbitmq-plugins注意在Ubuntu和Debian发行版上安装RabbitMQ的官方文档对于Fedora和RHEL发行版RabbitMQ已经有可用的软... 查看详情

linux系统中,啥是pre-compiledbinary

...的软件有的是用源码包的方式发布的,有的是在某个Linux发行版环境上预先编译成二进制文件然后打包发布的,像rpm软件包和deb软件包就是属于这种,预先编译好的软件包就属于pre-compiledbinary,因为是预先编译好的,对编译时的... 查看详情

跨发行版应用打包格式flatpak发布

...提及Flatpak,你可能已经知道它是一个无依赖关系的、跨发行版的软件打包框架,它可以让用户在多个基于Linux内核的操作系统上使用各种桌面应用程序。有些人可能记得Flatpak之前的名字叫做XDG-App,Flatpak是应GNU/Linux和开源软件开... 查看详情

如何在另一个发行版上安装 LLNL VisIt

】如何在另一个发行版上安装LLNLVisIt【英文标题】:HowtoinstallLLNLVisItonanotherdistribution【发布时间】:2020-12-1600:20:59【问题描述】:社区,我是一名使用OpenFOAM和ParaView进行CFD工作的学生,但由于项目要求,现在我想安装VisIt。我们... 查看详情

如何在 OpenSuSE 或其他基于 rpm 的发行版上安装 PyLucene?

】如何在OpenSuSE或其他基于rpm的发行版上安装PyLucene?【英文标题】:HowdoyouinstallPyLuceneonOpenSuSEoranotherrpmbaseddistro?【发布时间】:2015-02-2221:36:30【问题描述】:我正在尝试在opensuse上安装pylucene;存储库中是否有rpm包,或者我可以... 查看详情

打包C++11程序源的便携方法

...table-as-possible包中的,最好提供./configure等。因为Clang和GCC当前 查看详情

软件自带依赖库还是共享对象库/为什么linux发行版之间不能有一个统一的二进制软件包标准

...了linux软件包分为源码包和二进制包两种方式,而不同的发行版之间又有着自己的二进制打包格式。首先,软件运行依赖着各种各样的库,那么安装软件时到底是选择自带依赖库还是共享对象库之间就产生了分歧。最具有代表性... 查看详情

smem–linux内存监视软件

...工作中,内存使用情况的监控是十分重要的,在各种Linux发行版上你会找到许多这种工具。它们的工作方式多种多样,在这里,我们将会介绍如何安装和使用这样的一个名为smem的工具软件。Smem工具的简介Smem是一款命令行下的内... 查看详情

sh它可以在10行中完成,但结果并不是很好,因为它不会在许多发行版上运行(代码片段)

查看详情

C++/Qt 发行版中的库链接

】C++/Qt发行版中的库链接【英文标题】:LibrarylinkinginC++/Qtdistribution【发布时间】:2015-11-1816:23:11【问题描述】:我正在用C++11开发一个项目,在分发、编译、打包等方面并不是最大的专家。我使用CMake3.1.0Qt5.4(社区版)此外,我... 查看详情

0101.freeswitch简介

...TCH用于的一些常见功能包括:虽然FreeSWITCH可以在许多Linux发行版上运行,例如Debian、Ubuntu、CentOS、Fedora和RHEL,但首选的发行版是Debian,因为FS在开发时已经解决了对Debian的所有依赖关系,因此您可以顺利安装和启动。Debian也是Fre... 查看详情

alpinelinux3.11.0发布,面向安全的轻量级linux发行版

...系列的首个版本。AlpineLinux是一个面向安全的轻量级Linux发行版,该发行版以安全为理念,面向x86路由器、防火墙、虚拟专用网、IP电话盒及服务器而设计。另外,不同于常见的Linux发行版,AlpineLinux采用musllibc和busybox以减小系统... 查看详情