最新のDebian/RHELでlibicu50系を使用する方法
今日は、最新のDebianやRHELでlibicu50系を使用する方法について書いていく。これから紹介する手順を踏めば、問題なくlibicu50を使用できるようになります。といっても、普通にダウンロードしてビルドするだけです。
多分、DebianとかCentOSのリポジトリを目を皿にして探してもパッケージが52系しか見つからなかった人も多いはず。(4x系とか 52系は見つかるけど50系はミラーサイトしか見つからない)
ちなみに 4c
だけの話なので、 4j
については全く触れていません。
手順概要
- 必要なパッケージのインストール
- libicu50のソースコードの取得
- ビルドとインストール
必要なパッケージのインストール
まずは、ビルドに必要なツールやライブラリをインストールします。Debian系とRHEL系でコマンドが異なりますので、それぞれ紹介します。
Debian系の場合(Ubuntuを含む):
sudo apt-get update
sudo apt-get install build-essential libicu-dev wget
RHEL系の場合(CentOSを含む):
sudo yum groupinstall "Development Tools"
sudo yum install libicu-devel wget
libicu50のソースコードの取得
次に、libicu50のソースコードを取得します。ICUの公式サイトからダウンロードできます。
wget https://github.com/unicode-org/icu/archive/release-50-1-2.tar.gz
tar -xzf release-50-1-2.tar.gz
cd icu-release-50-1-2
ビルドとインストール
ソースコードを展開したら、次にビルドを行います。以下のコマンドを実行して、libicu50をビルドしてインストールします。
cd icu/source
./configure --prefix=/usr/local/icu50
make
sudo make install
インストールが完了したら、ライブラリパスを設定します。
echo "/usr/local/icu50/lib" | sudo tee /etc/ld.so.conf.d/icu50.conf
sudo ldconfig
Sourceビルド中に arch_info.c
が sys/sysctl.h
を探せない場合
比較的新しいOS(Linux)でビルドしようとしているしている人は遭遇するかも。いろいろ修正方法はあると思いますが、ここでは一時的にパッチを当ててしまう方法を紹介します。
#ifdef __linux__
#include <linux/sysctl.h>
#else
#include <sys/sysctl.h>
#endif
cygwin の場合の分岐を書いてある部分の中身を上記で置換してしまいます。 cygwin 環境で同じSourceでビルドしないことが明らかであればcygwinの分岐ごと消してしまっても問題無いでしょう。
確認
最後に、正しくインストールされたかを確認します。以下のコマンドを実行して、バージョン情報が表示されれば成功です。
/usr/local/icu50/bin/icuinfo
これで、最新のDebianやRHELでlibicu50を使用する準備が整いました。ちなみに、 libicuの shared object はバージョン違いでも競合しないようにファイル名が振られています。有り難いですね。