首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果你使用一个比发行版更新的gcc,系统库是否值得关注?

如果你使用一个比发行版更新的gcc,系统库是否值得关注?
EN

Stack Overflow用户
提问于 2021-09-06 20:10:51
回答 1查看 307关注 0票数 1

我的问题指定了我的场景的版本号,但是我对这个问题很感兴趣。

我想使用gcc 11在阿尔马Linux/红帽8(完全相同的ABI),这是附带gcc 8,以便使用C++20/23的特点,在我自己的程序。我用它编译的程序(所有用户空间应用程序)都将在同一个系统上运行。

我正在考虑从源代码编译gcc11,将其安装在/usr/local/gcc11 11/中,并在需要时调用它。我不想替换/删除系统gcc,因为支持给定发行版的各种工具都需要编译器。当我需要的时候,我只需要调用一个包装器脚本来使用gcc11。

我希望gcc11编译得很好,我用它编译的程序也会很好。但是任何非平凡的程序都倾向于链接到libc、libm、libdl、libp线程、libgcc_s、libstdc++等等。我将在这些系统库的较旧版本中使用gcc11。这些都是我从未直接处理过的系统库。

我担心的情况是,如果我使用的一些新的依赖项是围绕libp线程版本Z编写的,但是我的系统有X版,尽管ABI没有改变(这允许我的程序成功地与系统libp线程链接),但由于错误修复,这种行为是不同的,最后我会出现一些微妙的运行时错误。

这是一个有效的担忧吗?或者,当我的应用程序成功编译/启动时,我是黄金吗?

我能找到的关于这个问题的唯一讨论( Is there any issue in upgrading GCC version to other than the ones come with distro? )是关于信息的,而给出的警告不适用于我,因为我不打算触及系统gcc/libs。

EN

回答 1

Stack Overflow用户

发布于 2022-06-08 16:11:38

这取决于您正在针对哪些特性进行编译。cppreference.com的这篇文章更详细地介绍了哪个c++运行时支持每个语言版本的哪些c++特性。https://en.cppreference.com/w/cpp/compiler_support

由于您是在使用gcc进行编译,所以您需要查看libstdc++运行时库。看起来,运行时库的版本8甚至并不支持c++20的所有特性。但这是大多数事情。

为了解决这个问题,你可以

code

  • statically

  • 安装您想要的

  • 包的运行时版本,并分发libstdc++运行时库以及针对libstdc++的libstdc++链接,我不推荐

请记住,理论上可以对libstdc++进行静态编译,但根据您的情况,不能保证在运行时获得这些符号。如果您正在编译一个应用程序和一个库,这也会产生不同的效果。加载一个库,我的原因是您的库符号与已经加载的内容发生冲突(可能是通过libstdc++)。这篇文章很好地解释了一些值得https://stackoverflow.com/a/14082540/1196033注意的事情。

(而且,Android是一个奇怪的https://developer.android.com/ndk/guides/cpp-support)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69079844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档