GDモジュールをインストールするには

[上に] [前に] [次に]
匿名希望 1999/12/17(金) 00:13:01
GDモジュール(v1.23)をインストールしたいのですが、

% perl Makefile.PL PREFIX=/home/my/gd

'ABSTRACT' is not a known MakeMaker parameter name.
'AUTHOR' is not a known MakeMaker parameter name.
'CAPI' is not a known MakeMaker parameter name.
Note (probably harmless): No library found for -lttf
Writing Makefile for GD

% make

GD.xs: In function `XS_GD__Image__newFromGd2':
GD.xs:320: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image__newFromGd2Part':
GD.xs:354: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_gd':
GD.xs:390: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_gd2':
GD.xs:405: `GD2_FMT_COMPRESSED' undeclared (first use this function)
GD.xs:405: (Each undeclared identifier is reported only once
GD.xs:405: for each function it appears in.)
GD.xs:405: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_stringTTF':
GD.xs:1014: warning: assignment makes pointer from integer without a cast
make: *** [GD.o] Error 1

% make install

cc -c -I/usr/local/include -Dbool=char -DHAS_BOOL -I/usr/local/include -O2    -D
VERSION=\"1.23\" -DXS_VERSION=\"1.23\" -fpic -I/usr/lib/perl5/i386-linux/5.00404
/CORE  GD.c
GD.xs: In function `XS_GD__Image__newFromGd2':
GD.xs:320: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image__newFromGd2Part':
GD.xs:354: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_gd':
GD.xs:390: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_gd2':
GD.xs:405: `GD2_FMT_COMPRESSED' undeclared (first use this function)
GD.xs:405: (Each undeclared identifier is reported only once
GD.xs:405: for each function it appears in.)
GD.xs:405: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_stringTTF':
GD.xs:1014: warning: assignment makes pointer from integer without a cast
make: *** [GD.o] Error 1

という調子で、うまくインストールできません。
UNIXの知識もモジュールインストールの経験も
ほとんどないので困っています。
どうすればインストールできるのでしょうか。
よろしくお願いします。長文失礼いたしました。

ふじ 1999/12/17(金) 02:01:28
GD モジュールの 1.20 以降は、例の UNISYS の GIF のライセンス(パテント)の
問題があるため、GIF のサポートを取り止めて、PNG に移行しました。
で、それに伴って、GD ライブラリ ( libgd ) も PNG をサポートしている、1.6 以降の
ものが必要になります。
# GDモジュールは、GD ライブラリを Perl から使うためのインターフェースなので。

なので、お使いのシステムの GD ライブラリのバージョンが低いと、
インストールできません。
libgd 1.3 が入っているうちの Kondara MNU/Linux でも、匿名希望さんと全く同じ
エラーが出て、インストールできませんでした。

GD モジュールの.1.19 以前のものならインストールできると思います。
# が、これは前述のように GIF のライセンス問題があるので、
# いつ UNISYS から「金払え」と言われるか分かりません(^^;;

と、言う訳で、

* GDモジュールで GIF を扱いたい (UNISYS 問題は無視) → GD-1.19 をインストール
* PNG をサポートした 1.23 を使いたい → libgd の 1.63 以降を
http://www.boutell.com/gd/
から入手して、インストール。その後、GD-1.23 をインストール。

ということになるかと。

匿名希望 1999/12/17(金) 17:04:27
ありがとうございます、ふじさん。

% make
gcc -I/home/myname/local/include -I/home/myname/include/X11 -I/home/myname/X11R6
/include/X11 -O   -c gd_png.c -o gd_png.o
gd_png.c: In function `gdImageCreateFromPngCtx':
gd_png.c:152: warning: passing arg 3 of `png_set_read_fn' from incompatible poin
ter type
gd_png.c:348: `PNG_INTERLACE_ADAM7' undeclared (first use this function)
gd_png.c:348: (Each undeclared identifier is reported only once
gd_png.c:348: for each function it appears in.)
gd_png.c: In function `gdImagePngCtx':
gd_png.c:450: warning: passing arg 3 of `png_set_write_fn' from incompatible poi
nter type
gd_png.c:494: `PNG_INTERLACE_ADAM7' undeclared (first use this function)
gd_png.c:494: `PNG_INTERLACE_NONE' undeclared (first use this function)
gd_png.c:498: `PNG_COMPRESSION_TYPE_DEFAULT' undeclared (first use this function
)
gd_png.c:498: `PNG_FILTER_TYPE_DEFAULT' undeclared (first use this function)
make: *** [gd_png.o] Error 1

早速gd1.7.3をインストールしようとしたのですが、
このようなエラーが出ます。
Perlのモジュール以外をインストールしたこともなく、
原因がよくわかりません。申し訳ありませんが、
教えていただけないでしょうか。
# gdを使って作成した画像は自分の環境で見れればいいので
# 不便なGIFは使いたくありません。

ふじ 1999/12/17(金) 18:10:36
libpng がないのかしら。

>gd 1.7.3 requires that the following libraries also be installed:
>
>libpng
>zlib
だそうなので、ないなら自分でこれも入れる・・・
#管理者に頼むのが早い気もしますが。

匿名希望 1999/12/18(土) 18:17:43
ありがとうございました、ふじさん。
GD.pmをインストールするところまでこぎ着けたのですが、

use lib '/home/myname/module';
use GD;

という内容のCGIを実行すると

Can't load '/home/myname/module/auto/GD/GD.so' for module GD: File not found at
/usr/lib/perl5/i386-linux/5.00404/DynaLoader.pm line 166.

at gd.cgi line 4
BEGIN failed--compilation aborted at gd.cgi line 4.

というエラーが出ます。
Makefileはかなりいじって、
なんとかインストールできたのですが。
/usr/lib/perl5/i386-linux/5.00404には
DynaLoader.pmはあるようです。
よろしくお願いします。

B-Cus 1999/12/19(日) 05:09:27
これ読んで。
../199911/99110255.htm

匿名希望 1999/12/20(月) 20:35:30
いろいろMakefileを書き直したりしましたが

Can't load '/home/myname/module/auto/GD/GD.so' for module GD: File not found at
/usr/lib/perl5/i386-linux/5.00404/DynaLoader.pm line 166.

at gd.cgi line 4
BEGIN failed--compilation aborted at gd.cgi line 4.

のままです。Makefileの問題なのでしょうか。
よろしくお願いします。

B-Cus 1999/12/20(月) 23:25:50
> いろいろMakefileを書き直したりしましたが
Makefile を書き直す必要はないはずです。gd やら libz やら入れて、
 % perl Makefile.PL INSTALLDIRS=site INSTALLSITELIB=/home/myname/module
 % make
 % make install
として、
 % perl -e 'use lib "/home/myname/module"; use GD'
でいけるはず。

匿名希望 1999/12/21(火) 00:00:13
最初はそのままやってみたのですが
(略)
/usr/local/bin/perl -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 /usr/li
b/perl5/ExtUtils/xsubpp  -typemap /usr/lib/perl5/ExtUtils/typemap -typemap typem
ap GD.xs >GD.tc && mv GD.tc GD.c
cc -c -I/usr/local/include -Dbool=char -DHAS_BOOL -I/usr/local/include -O2    -D
VERSION=\"1.23\" -DXS_VERSION=\"1.23\" -fpic -I/usr/lib/perl5/i386-linux/5.00404
/CORE  GD.c
GD.xs: In function `XS_GD__Image__newFromGd2':
GD.xs:320: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image__newFromGd2Part':
GD.xs:354: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_gd':
GD.xs:390: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_gd2':
GD.xs:405: `GD2_FMT_COMPRESSED' undeclared (first use this function)
GD.xs:405: (Each undeclared identifier is reported only once
GD.xs:405: for each function it appears in.)
GD.xs:405: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_stringTTF':
GD.xs:1014: warning: assignment makes pointer from integer without a cast
make: *** [GD.o] Error 1
などといろいろエラーが出たので、Makefileの
gdとzlib関係のディレクトリのパスを書き直したんですが・・・。
やはりうまくいきません。
# 管理している方にはgdやzlibのインストールは無理だと言われたので、
# /home/myname/local以下にインストールしています。

B-Cus 1999/12/21(火) 00:20:23
> # /home/myname/local以下にインストールしています。
なるほど。じゃあ Makefile の書き換えも必要ですね。

インクルードファイル(gd.hとか)のあるディレクトリを -I で指定、
ライブラリのあるディレクトリ場所を -L で指定、でうまくコンパイルできるはず。

少なくとも
 % perl Makefile.PL INSTALLDIRS=site INSTALLSITELIB=/home/myname/module
でコンパイルしたなら、
> Can't load '/home/myname/module/auto/GD/GD.so' for module GD: File not found at
> /usr/lib/perl5/i386-linux/5.00404/DynaLoader.pm line 166.
というエラーにはならないと思う。/home/myname/module/auto/GD/GD.so という
ファイルができるはずだから。

匿名希望 1999/12/24(金) 00:31:09
>> Can't load '/home/myname/module/auto/GD/GD.so' for module GD: File not found at
>> /usr/lib/perl5/i386-linux/5.00404/DynaLoader.pm line 166.
>というエラーにはならないと思う。/home/myname/module/auto/GD/GD.so という
>ファイルができるはずだから。

makeやmake installの際にはエラーは出ませんし、
/home/myname/module/auto/GD/GD.soもちゃんとあるんですけど、
やはり
Can't load '/home/myname/module/auto/GD/GD.so' for module GD: File not found at
/usr/lib/perl5/i386-linux/5.00404/DynaLoader.pm line 166.
というエラーが出ます。
どうすればいいのかさっぱりわかりません。

B-Cus 1999/12/24(金) 12:32:32
困ったねぇ。

libpng も gd も入ってない FreeBSD マシンがあるんで、
ホームの下に一式入れて同じ状況を再現しようと
思ったんだけど、こっちでは微妙に違うエラーが発生してます。
# GD.so の中のシンボルが解決できてない。

いかがなもんでしょうね?>ふじさん

> 管理している方にはgdやzlibのインストールは
> 無理だと言われたので、
これを何とかお願いしたらいけるんじゃないかと思うんだけど…。

ふじ 1999/12/24(金) 13:47:31
手元の libpng と libgd の入っていない(zlibはあった)
RedHat Linux6.1 で、一式ホーム以下に入れたところ、

> perl: error in loading shared libraries: /home/developer/module/auto/GD/GD.so: u
> ndefined symbol: gdImagePngPtr

もしかしてこれって、B-Cus さんのところで起きたエラーと同じですか?

で、ホーム以下じゃなくて、普通に /usr/local 以下にライブラリ類と
GDモジュールをインストールしたら、あっさり動作しましたので、

> これを何とかお願いしたらいけるんじゃないかと思うんだけど…。
同感です。
#役に立たなくてすみません(^^;

ふじ 1999/12/24(金) 13:56:01
追記。

> 普通に /usr/local 以下にライブラリ類とGDモジュールをインストール
ライブラリは /usr/local 以下で、GDモジュールはホーム以下に
インストールしても動きました。

B-Cus 1999/12/24(金) 15:03:17
> もしかしてこれって、B-Cus さんのところで起きたエラーと同じですか?
うっとこは undefined symbol: gdFontTiny でした。

ん〜、環境変数 LD_LIBRARY_PATH とか LD_PRELOAD あたりなのかなぁ。

> Can't load '/home/myname/module/auto/GD/GD.so' for module GD: File not found
しかし not found というのは謎ですね。

教えて perl の偉い人。

匿名希望 1999/12/28(火) 19:07:47
[[解決]]
>> これを何とかお願いしたらいけるんじゃないかと思うんだけど…。
>同感です。
再度libpng、zlibのインストールをお願いしたのですが、
今日答えが返ってきました。
やはりはインストールしてもらえませんでした。
(libgdはあるけど古い)
普通はインストールしてもらえる物なのでしょうか。
なんかお願いしても絶対に「無理です」という答えが返ってくるので。
ひとまずあきらめることにします。
ご迷惑をおかけしました。ありがとうございました。

B-Cus 1999/12/29(水) 04:31:42
http://p4room.mda.or.jp/fly/ja/ などもあるので、そっちを
使うのもいいでしょう。
# GIF ライセンス的にはマズイんだけど。いつになったら fly は
# PNG に対応するんだろうか。

コンピュータごときに人間様が悩まされるのは むかつくので、
GD モジュールの件は調べておきます。

匿名希望 2000/01/05(水) 20:23:44
解決済みにしておきながら投稿してすみません。
実はGDとPNGgraphモジュールを使って、
グラフを作成したかったんです。
# 値を入力するだけで、
# いろいろな種類のグラフが作成できるので。
少し上に書きましたが、古いlibgdならあったので、
それで大丈夫なGD-1.19と
GIFgraphモジュールを使って
グラフを作ることに成功しました。
perlのバージョンも古いので、
一部pmファイル?を修正しなければなりませんでしたが、
うまくいきました。
# GIFは使いたくなかったのですが。

>コンピュータごときに人間様が悩まされるのは むかつくので、
>GD モジュールの件は調べておきます。
ありがとうございます。

B-Cus 2000/02/16(水) 19:59:48
これでどうじゃ。ふじさん確認してもらえません?

gd を展開。
 % cd ~/src/;tar zxvf gd-1.7.3.tar.gz
gd をmake
 % cd ~/src/gd-1.7.3;make
libgd.a を適当な場所にインストール。
 % cp libgd.a ~/lib

GD を展開。
 % cd ~/src/;tar zxvf GD-1.23.tar.gz
Makefile を作成
 % cd ~/src/GD-1.23; perl Makefile.PL INSTALLDIRS=site INSTALLSITELIB=/home/myname/module
ここで make すると、gd.h とか libgd.a が見つからず
こけてしまうので、Makefile に適当に -I /home/myname/src/gd-1.7.3 とか
-L /home/myname/lib を追加。

さらに (undefined symbol の件はここがダメだった)、
perl Makefile.PL したとき libgd.a が見つからなかったので、
libgd.a がリンクされないようになっている。そこで、Makefile の
 EXTRALIBS = -lz -lpng -lttf -lm
 LDLOADLIBS = -lz -lpng -lttf -lm

 EXTRALIBS = -lgd -lz -lpng -lttf -lm
 LDLOADLIBS = -lgd -lz -lpng -lttf -lm
に修正。

GD を make。
 % maek
GD をインストール
 % make install

これで、
 use lib "/home/myname/module";
 use GD;
というスクリプトが動くはず。


本来は、Makefile.PL をいじったり、perl Makefile.PL するときに
何か引数を与えるものかもしれない…が、よくわかりません。誰か教えて。

[上に] [前に] [次に]