[Linux] 使用 meson 與 ninja 編譯新版 glib 2.67.4
專案裡用到了舊版的 glib 2.28.8,
被 Black Duck 掃出來有安全性的疑慮,因此得把它升級。
只是沒想到,glib 的編譯方式,
從以往常見的 configure + make + make install,
著實讓我花了好一段時間,才能順利編譯。
下面就簡短紀錄一下流程…
1. 安裝 Python 3
meson 是一套基於 Python 3 的編譯工具,
因此要用 meson,得先裝好 Python 3 (還得至少要 Python 3.6 或以上)…
(有點不太對等啊,為了裝一個小 meson 得裝一個大 Python 3,
在新版的 Linux 是沒問題,但在像舊版的 CentOS 6 上要安裝,可是麻煩不少…)
在 CentOS 上,可以用 yum 安裝 Python 3:
sudo yum -y install python3
2. 安裝 meson
用 pip3 安裝 meson:
sudo pip3 install meson
在某些機器上,不知道為什麼已經裝好了 Python 3 卻沒有 pip3…
這時可以改執行下面指令:
sudo python3 -m pip install meson
3. 安裝 ninja
ninja 可以用原始碼編譯,也可以直接抓編譯好的二進位檔來用,
我貪圖方便,是直接拿二進位檔來用,
把 ninja 這個執行檔直接解壓縮到 /usr/local/bin 目錄下:
wget https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-linux.zip sudo unzip ninja-linux.zip -d /usr/local/bin/
4. 編譯 glib 2.67.4
編譯 glib 時,先執行 meson,再執行 ninja。
下面的例子中,示範了如何把 LDFLAGS, CFLAGS, CC 等環境變數,
以及一些 glib 特有的變數 (如 gtk_doc, man, tests 等等),帶入給 meson:
wget https://download.gnome.org/sources/glib/2.67/glib-2.67.4.tar.xz tar xvf glib-2.67.4.tar.xz cd glib-2.67.4 export LDFLAGS="-Wl,-rpath='/usr/lib/64:/test/lib'" export CFLAGS="-g -fPIC -m64 -fstack-protector-all" export CC="/usr/bin/gcc" meson -Dgtk_doc=false -Dman=false -Dtests=false _build ninja -C _build
編譯好的 glib 會在類似 _build/glib/libglib-2.0.so 這種地方,
找不到的話,用 find 在 _build 目錄裡找找看,應該就可以囉~
參考資料:Compiling the GLib package: GLib Reference Manual