在gentoo系统上升级gcc后要重建的软件包


Answers:


11

TL; DR

作为Gentoo用户,我对此有不同的看法。尽管我同意彼得的“让系统决定”的方法,但是对于ABI更新我还是持不同意见。ABI更新有时是行为上的重大转变。对于GCC 4.7,ABI更改是采用了新的C ++ 11标准,彼得也指出了这一点。

这就是为什么我写这个答案的原因。我是标准迷。我是从网络世界开始的,当时大约有4种不同的浏览器,而HTML中的很多标签仅受某些浏览器支持。当时,所有这些标签都增加了混乱,并且IMO使工作变得更加艰辛。出于同样的原因,C ++已经标准化,总之,您可以编译我编写的代码,也可以编译您编写的代码。如果我们选择不遵循标准,我们将失去共享的自由。

C ++ 98已经成为13年批准的标准。C ++ 11在2011年被ISO委员会批准,并已完全集成到GCC 4.7中。请参阅当前的ISO状态新的ISO标准


为什么我们应该以Gentoo用户的身份享有特权

作为基于源的发行版的用户,我们有独特的机会来塑造软件包的未来行为,因为我们在使用它之前先对其进行编译。因此,为了准备这个机会,我觉得在更新到新的编译器时应运行以下命令:

emerge -ev system
gcc-config -l && gcc-config *new compiler name*
env-update && source /etc/profile
emerge -1v libtool
emerge -ev system

第一次通过系统会使用旧的编译器构建新的编译器及其依赖项。第二次通过系统将重建新的编译器及其与新编译器的依赖关系。具体来说,我们希望这样做,以便在Build Chain软件包也进行了更新的情况下,Build Chain也可以利用新编译器的新功能。觉得这太过分了,因为我们不知道哪个软件包已经支持新标准,但是我们确实希望我们的构建链表现得合理。

至少对系统集执行此操作,使我们准备好根据新标准测试我们编译的每个软件包,因为我们使用滚动发行版。通过这种方式,在更新构建链后添加-std=c++11CXXFLAGS使我们能够测试破损,并能够将错误直接提交给我们的bugzilla或向实际开发人员的上游提交,原因很简单:

嘿,您的软件包使用新的C ++标准就无法使用了,我已经附加了构建日志。

我认为这对开发人员是有礼貌的,因为随着该标准被更广泛地采用并且逐渐淘汰了旧标准,他们现在有时间准备。想象一下,如果开发人员收到数百个错误,那将是一件麻烦事,因为他或她一直等到标准被淘汰为止。

据我所知,没有其他发行版可以使用此方法,因为在各自的用户社区可以使用补丁或更新之前,实际的软件包维护者以中间商的身份存在。我们确实有维护者,但也有使用本地可移植树的能力。


关于赏金申请中发布的深刻见解

我不知道是否发布了赏金,因为大家都喜欢我有见地,经过深思熟虑的答案,但是在尝试赏金的过程中,我将尝试回答您有见地,经过深思熟虑的赏金产品。首先,让我回应一下,作为基于源的发行版的用户,我坚信将这些点连接起来的就是您在赏金请求中要求的所有内容。某人可以成为出色的编码人员,但对软件却一无所知。同样,有些人是笨拙的编码人员,他们非常关心软件。

在我来到这里之前,我是Gentoo论坛上的狂热海报。终于,当我开始来到这里时,我才意识到每个人都有一定程度的才能使用。他们选择与此相关的方法才能使贡献有所不同。我们中的一些人是伟大的作家(不是我),因此,如果您想为某个项目做出贡献,但是您不写或不能编写代码或修复错误,请记住,伟大的作家可以编写出色的文档或出色的Wiki文章。 。

该标准存在的另一个原因是:在社区中,期望其成员遵守某些规则。在此也遵循该声明。如果我提交了修订,补丁,增强等功能,但没有标准,则该补丁仅在我认为重要的情况下才能运行,即,如果我使用的是whizbang编译器2.0,并且该补丁是针对whizbang编译器1.0构建的,将失败。由于该工作是针对社区的,因此社区希望一切在大多数情况下都能正常工作,因此,我可以在标准中规定,而不是强迫所有用户升级到编译器2:

该软件包选择允许与Whizbang Compiler 1.0向后兼容

这样,作为一名开发人员,不管是否是一名糟糕的编码人员,我都知道我必须使用或至少针对Compiler Version 1.0进行测试。另一方面,作为用户,我可以选择自己想做的事情。如果我不满意,可以通过提交bug或“此软件简直是废话!”的另一极端请求修补程序,而不执行任何操作。无论如何,用户和开发人员都理解该标准,因为它是书面的。

弥合差距在用户方面采取了某种形式的行动,这需要您要求我和他人提出的所有评论,我们必须依靠用户社区及其各种形式的才能来弥合这种差距。如果您选择成为其中一名用户,我会为您鼓掌。对于那些选择不活动的人,请记住,如果您要解决问题,则活动的人需要输入。所以我告诉你,不要害羞提交错误,或者告诉我们我们需要更新文档,如果我们不礼貌地告诉我们,或者找其他人,直到找到自己的专业领域。


其他与此主题相关的有趣读物

  1. C ++ 11的最大变化(以及您为什么要关心)
  2. GCC中的C ++ 0x / C ++ 11支持
  3. 有关标准C ++的新闻,状态和讨论

然后,我将更新措辞,并感谢您以这种方式引起注意……
eyoung100 2014年

3

这很大程度上取决于您进行了哪种编译器升级。如果涉及到实质内容,则应重新编译所有内容*),因为编译器可能会更改ABI。在很多情况下,这不是必须的,但是如果您的软件包依赖于C ++ 11之类的东西,那么您可能会遇到问题-例如,参见有关GCC 4.7中ABI更改Gentoo新闻GCC bugzilla

*)注意对“重新编译”的强调-重新编译(读取重建)Python或Perl应用程序绝对没有多大意义,因为您更改了C编译器。除非它也具有本机组件(也可能如此)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.