在 Ubuntu 上为 CentOS 编译 Rust 程序,


现在 CentOS 8 还没出来,最新的是 CentOS 7.6,上面搭载的 glibc 版本是 2.17,都已经是 2012 年那时候的版本了。

现在开发者比较常用的桌面 Linux 系统,比如 Ubuntu / Debian / Mint / Arch / Manjaro 等,都是比较新的 glibc 版本了,比如 Ubuntu 18.04 已经到了 2.27 的版本了。在 glibc 2.18 的时候,引入了一个 __cxa_thread_atexit_impl 标记,所有基于 2.18 及以上的 glibc 环境编译的动态链接程序,如果放到 2.18 之前的 glibc 环境里跑,就会报错:

./foo: /lib/libc.so.6: version 'GLIBC_2.18' not found (required by ./foo)

这也是为什么在 Ubuntu 上编译个 Rust 的 helloworld 程序,放到 CentOS 上都跑不起来的原因。

也曾想过升级 CentOS 上的 glibc 版本,后来发现这样干太危险,在虚拟机上试一下手工编译升级,结果把 CentOS 搞挂了,起都起不来了!

然后就不得不在虚拟机里跑一个 CentOS 来进行 Rust 程序的编译,这样编译出来的程序放到 CentOS 服务器上去跑得倒是很欢快,只是在虚拟机里跑 CentOS 实在是卡得受不了,后来想在机器上划个分区重新来安装一套 CentOS 得了,但是又不太甘心放弃这么好用的 Mint 系统,改用那套蹩脚的 CentOS。

后来得到高人指点,尝试在 Mint 上用 Docker 跑一个 CentOS 系统,来进行 Rust 程序的编译,发现这样的效果很好!开始还以为 CentOS 默认用的 3.X 的内核,跑在 4.15 的内核上会有问题,后来发现没啥问题。

以后还是尽量不要用 CentOS,换成 Ubuntu Server 爽多了!

相关内容