You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu下使用高版本GCC编译兼容低系统运行时的闭源商业共享库的解决方案咨询

Ubuntu下使用高版本GCC编译兼容低系统运行时的闭源商业共享库的解决方案咨询

我是一名平台与构建工程师,所在公司主要使用Red Hat Enterprise Linux及其兼容发行版,所以平时Ubuntu用得不多。

我负责开发闭源商业软件,大多是数学建模类项目,用C和C++编写后编译成共享库发布。对我来说,跨发行版的二进制兼容性是重中之重——毕竟我的库只依赖glibc和GCC语言运行时库(libgcc_s.so.1libstdc++.so.6),而这些库都有严格的版本化符号,每次行为变更都会生成新版本,向前兼容性很强,理论上只要依赖这些就能实现跨发行兼容。

但现在遇到了个难题:我目前在RHEL 8.x上构建,它自带的GCC是8.x版本、glibc是2.28版本,这样编译出的库能在同版本或更高版本的系统上运行,但这个老版本GCC不支持开发团队急需的C20标准,更别提刚出来的C23了。

RHEL针对这个问题有现成的解决方案:GCC Toolset。这类工具集有多个版本,但原理都一样——提供基于RHEL 8.x运行时构建的高版本GCC,配套标准头文件和GNU ld的特殊脚本。这些脚本会告诉链接器:优先使用系统自带的GCC语言运行时库,对于系统库中没有的函数,就把对应的代码静态链接到正在构建的共享库(或可执行文件)里。听起来有点玄乎,但实际用起来效果特别好,毕竟Red Hat是GCC的主要贡献者,能保证这套机制稳定运行。

那我想问问,Ubuntu有没有类似的工具呢?我想找个RHEL的替代方案,毕竟担心Red Hat利用GPL漏洞搞掉它的兼容发行版,而RHEL本身太贵,不可能在每台测试机上都装。

我对Ubuntu编译环境和运行时的了解,来自之前对相关问题的经验总结。目前来看,要是只需要支持C20,升级到Ubuntu LTS 22.04就能满足需求,但C23的支持得等GCC 14(预计2024年4-5月发布),而即将推出的Ubuntu LTS 24.04大概率赶不上这个版本的GCC。而且我推测,企业级Ubuntu用户的主服务器只会装LTS版本,不会用中间的非LTS版本。

如果Ubuntu确实没有这类工具也没关系,只是觉得作为企业级Linux发行版,可能有我没注意到的方案,所以来问问。

备注:内容来源于stack exchange,提问作者John Dallman

火山引擎 最新活动