天天看點

在 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 爽多了!