如今 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 爽多了!編譯