概要
在Ubuntu 20.04 MATE 64位元版使用小小輸入法已好一陣子了,但在Qt程式上無法正常輸入中文,系統中的Qt是5.12版,而小小輸入法官方並無提供此版的Qt輸入法插件,下載5.13版並無作用。
心想試著在這環境上自行從原始碼編譯小小輸入法與Qt 5.12版的輸入法插件,看能否改善以上問題。只編譯了64位元版,32位元版編譯失敗,而且新版的Ubuntu也不再出32位元版,就直接放生吧。編譯過程出現幾次錯誤,做了點調整後才完成。
以下是在Ubuntu 20.04 64位元版編譯小小輸入法的工作記錄,其他不同版本的Linux若要做此工作,可能要做些調整,請查閱最後面的參考與連結。原始的編譯說明[1]中有提到編譯工作所須幾個軟體的最低版本與條件,這裡不列,因當前環境在正常情形下,不至於搞到低於那些條件。
在後面會附上編譯完成的檔案。
整備編譯環境
準備好工作用的機器灌好Ubuntu 20.04 64位元,更新到最新版本;或者也可以在虛擬機中做此工作。
編譯工作須要用到一些工具、編譯器與開發環境的包(package,或稱套件),以下為方便說明,分成幾段安裝。確定已安裝好的部分,可自行略過。
先裝幾個工具與編譯器的包:
$ sudo apt install build-essential git curl
安裝好相關的開發環境:
$ sudo apt install libgtk-3-dev libgtk2.0-dev libxkbcommon-dev libibus-1.0-dev libc6-dev-amd64
編譯Qt 5模塊(即Qt輸入法插件)要用到Qt 5開發環境:
$ sudo apt install qtbase5-dev qtbase5-private-dev
如果忘了安裝前述的Qt 5開發環境,編譯時會出現這樣的錯誤:
Package Qt5Gui was not found in the pkg-config search path.
Perhaps you should add the directory containing `Qt5Gui.pc'
to the PKG_CONFIG_PATH environment variable
No package 'Qt5Gui' found
child_process.js:655
throw err;
^
Error: Command failed: pkg-config --modversion Qt5Gui
Package Qt5Gui was not found in the pkg-config search path.
Perhaps you should add the directory containing `Qt5Gui.pc'
to the PKG_CONFIG_PATH environment variable
No package 'Qt5Gui' found
編譯工作所用的腳本以JavaScript撰寫,故須要有Node.js來執行它們。有幾種不同的安裝方式,這裡採用LTS版本[3]:
$ curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
$ sudo apt-get install -y nodejs
下載原始碼
Linux版的原始碼自2018年至今一直沒更新,仍是2.5版,本文使用此版本。以下在自己的家目錄建立一資料夾,以git取得原始碼存放其中;以wget取得編譯工作用的JavaScript腳本;然後自行建立原始碼目錄中幾個空的資料夾,因git不存空資料夾,由於不編譯32位元版,所以就不建立存放32位元二進制檔的空資料夾:
$ mkdir yong_src
$ cd yong_src
$ git clone https://github.com/dgod/yong.git
$ cd yong/
$ wget https://raw.githubusercontent.com/dgod/build.js/master/build.js
$ mkdir -p {llib,cloud,gbk,mb,vim}/l64
$ mkdir -p {im,config}/{l64-gtk3,l64-gtk2}
$ mkdir -p im/gtk-im/{l64-gtk3,l64-gtk2}
$ mkdir -p im/IMdkit/l64
$ mkdir -p im/qt5-im/l64-qt5
上述最後一行在編譯Qt 5模塊時會用到,若沒此目錄,編譯過程會出現像這樣的錯誤:
Failed change to directory '/home/fygul/yong_src/yong/im/qt5-im/l64-qt5'
只要自行把最後那個 l64-qt5 子目錄建立好,重新執行後述的編譯命令即可。
進行編譯工作
編譯腳本可用來編譯整個Linux版的小小輸入法二進制檔案;或只編譯Qt 5模塊;還可以把編譯好的二進制檔連同相關檔案打包成一壓縮檔。它還有其他作用,但不在本文談論範圍。
只編譯Qt 5模塊
若不想編譯整個輸入法,只想編譯Qt 5模塊,使用以下的命令(本文環境不必像參考[4], [5]調整 im/qt5-im/build.txt):
$ node build.js -C im/qt5-im
完成後,自行取得產出的檔案,並放到正確的位置使用[6],後述的打包工作並不包含此檔。以本文為例,它在:
/home/fygul/yong_src/yong/im/qt5-im/l64-qt5/libyongplatforminputcontextplugin.so
編譯Linux版小小輸入法
之前編譯32位元版本時出現這樣的錯誤:
/usr/bin/ld: 當搜尋用於 /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a 時跳過不相容的 -lgcc
/usr/bin/ld: 找不到 -lgcc
基於前述的理由,懶得去解決它,就只使用以下命令來編譯64位元版本,同時也會編譯上述的Qt 5模塊:
$ node build.js l64
打包成7z壓縮檔
由於沒編譯32位元的版本,所以此處要做點調整,排除這部分,不然腳本執行打包程序時會出錯。
打開 yong/install/build.txt ,在第69行前加上釋註符號,使其失效而不複製32位元版的檔案:
// copy_build("l32");
完成後存檔,執行:
$ node build.js -C install copy dist
腳本會調用7za做最終的打包工作,本文環境預裝p7zip-full,已包含此壓縮程式。打包完成的壓縮檔,以本文為例在:
/home/fygul/yong_src/yong/install/yong-lin-20201116.7z
結語
編譯出來的檔案大小相較官方版本的二進制檔而言感覺上是大了點,但整體上還不算太大,仍配得上小小二字。
在Kubuntu 20.04.1上安裝[7]並測試這回編譯的小小輸入法,在Qt 5程式Kate上可正常使用,如下圖:
附上編譯完成的檔案,把上述兩個輸出檔案,壓縮成一個7z檔,在此。SHA256校驗碼:84a939d2be037b3de1cbf1e56915e0e6cc1cc56221343136389b4f3f2937837c
沒有留言:
張貼留言