ふにょい日記

ふにょ・い 2 (形)[文]ク ふにょ・し 思い通りにならない為力が入らなくなる様。[派生] ――げ(形動)――さ(名)

node-canvas をインストールしてみました

2010-11-28 07:01:04 | プログラミング・コンピューター
ServersMan@VPS (CentOS 5.4) に node-canvas をインストールした時、結構引っかかってしまいました。
ただ、引っかかったのは、自分が Linux についての初歩的であろう知識が足りなかった為です。

Node.js は安定版(0.2.5)をインストールしてあります。
npm も既にインストールしてあります。

以前、 ImageMagick をインストールしてたので、その時に色々入りました。
また、以前、 node-image をインストールしたときに yum で giflib* をインストールかアップデートしました。

node-canvas のインストールは、
# npm install canvas
とするだけですが、その前に cairo がインストールされていなければなりません。
yum で cairo をインストールして、あるいは、既に yum によって cairo がインストールされていた状態で、上のコマンドを実行しても

cairo_format_stride_for_width was not declared in this scope

というようなコンパイルエラーが出て npm install canvas が失敗しました。
どうも、 yum でインストールされる cairo のバージョンが 1.2.4-5.el5 と古い為のようです。(ググって見つけたどこかの ML のアーカイブを読むと、このエラーの解決には、 cairo 1.6 以降が必要と読めました。)
なので、自分で cairo をビルドしました。

cairo には、 pixman が必要なようなのでそれもビルドします。
pixman は cairo と同じプロジェクトで作業されているようで、同じサイトで配布されています。

# wget http://cairographics.org/releases/pixman-0.21.2.tar.gz
# tar xvfz pixman-0.21.2.tar.gz
# cd pixman-0.21.2
# ./configure
# make
# install

これで、 pixman が /usr/local/lib にインストールされました。
次に cairo をビルドするが、これまで一度も /usr/local/lib にインストールした事が無かった場合(手動でビルド~インストールした事がない場合)、
設定をしないとライブラリが認識されません(これが分かりませんでした)。

/usr/local/lib を認識させる為の設定は、長くなった上に今回の作業に特有の物ではない為、
別記事に分離しましたので、そちらをご参照ください

/usr/local/lib を認識させる為の設定の後、下記のようにして cairo をビルド、インストールしました。

# wget http://cairographics.org/releases/cairo-1.10.0.tar.gz
# tar xvfz cairo-1.10.0.tar.gz
# cd cairo-1.10.0
# ./configure --enable-gobject=no
# make
# install

./configure の引数に --enable-gobject=no を指定したのは、下記のエラーを解決できず、
面倒になった為に、エラーを回避する事にした為です。

Making all in cairo-gobject
make[4]: Entering directory `/root/cairo-1.10.0/util/cairo-gobject'
CC libcairo_gobject_la-cairo-gobject-enums.lo
cairo-gobject-enums.c: In function 'cairo_gobject_status_get_type':
cairo-gobject-enums.c:14: error: implicit declaration of function 'g_once_init_enter'
cairo-gobject-enums.c:14: warning: nested extern declaration of 'g_once_init_enter'
cairo-gobject-enums.c:57: error: implicit declaration of function 'g_once_init_leave'
cairo-gobject-enums.c:57: warning: nested extern declaration of 'g_once_init_leave'
make[4]: *** [libcairo_gobject_la-cairo-gobject-enums.lo] Error 1
make[4]: Leaving directory `/root/cairo-1.10.0/util/cairo-gobject'

これで、 cairo がインストールできましたので

# npm install canvas

として、 node-canvas がインストールできました。
テスト用のスクリプトを実行してみると

node: symbol lookup error: /usr/local/lib/libcairo.so.2: undefined symbol: pixman_image_create_bits

と出ました。
どうやら、古い方の pixman (/usr/lib/ の方)がロードされてしまっているようなので、
先ほど自分でビルドしてインストールした方を( /usr/local/lib/libpixman-1.so )を読み込ませる為に、

# export LD_PRELOAD=/usr/local/lib/libpixman-1.so

とした後、再度実行すると成功しました。
本当は古い pixman をアンインストールするべきなのでしょうが、そうすると釣られて、
色んな物がアンインストールされてしまうでしょうから、とりあえず、再起動しても有効なように
上のスクリプトを /etc/profile.d/libpixman-1.sh に保存しました。

他にもっといい方法があるのでしょうが…。


最新の画像もっと見る

1 コメント

コメント日が  古い順  |   新しい順
Можно ли РАЗВЕСТИ ДЕВУШКУ НА СЕКС (Elijahlaphy)
2020-09-16 02:50:55
https://bit.ly/2FyoGOs - Можно ли РАЗВЕСТИ ДЕВУШКУ НА СЕКС
返信する