如今 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 环境里跑,就会报错:ui
./foo: /lib/libc.so.6: version 'GLIBC_2.18' not found (required by ./foo)
code
这也是为何在 Ubuntu 上编译个 Rust 的 helloworld 程序,放到 CentOS 上都跑不起来的缘由。开发
也曾想过升级 CentOS 上的 glibc 版本,后来发现这样干太危险,在虚拟机上试一下手工编译升级,结果把 CentOS 搞挂了,起都起不来了!虚拟机
而后就不得不在虚拟机里跑一个 CentOS 来进行 Rust 程序的编译,这样编译出来的程序放到 CentOS 服务器上去跑得却是很欢快,只是在虚拟机里跑 CentOS 实在是卡得受不了,后来想在机器上划个分区从新来安装一套 CentOS 得了,可是又不太甘心放弃这么好用的 Mint 系统,改用那套蹩脚的 CentOS。it
后来获得高人指点,尝试在 Mint 上用 Docker 跑一个 CentOS 系统,来进行 Rust 程序的编译,发现这样的效果很好!开始还觉得 CentOS 默认用的 3.X 的内核,跑在 4.15 的内核上会有问题,后来发现没啥问题。io
之后仍是尽可能不要用 CentOS,换成 Ubuntu Server 爽多了!编译