[OS: Linux RedHat 8.0]
Na 3 dagen ploeteren en zweten heb ik eindelijk m'n apache kunnen compileren, maar nu m'n php nog... ownee... een fout.
Dat scenario is helaas alom bekend
, maar zelden is het de fout van de makers van de source.
Het doel was om PHP 4.0.2 te compileren met GD 2.0.4, dus heb ik braaf bij http://www.boutell.com/gd de laatste GD gedownload.
Toen GD (met freetype 2.1.2) gecompileer en geïnstalleerd.
De volgende klus was PHP.
Die heb ik vervolgens geconfigureerd met ./configure
met o.a. de parameter: --with-gd
Dit ging helaas elke keer fout.
De reden: een fout in de source van PHP!!!
Hoe is het mogelijk!!
GD 2.0.4 heeft namelijk iets nieuws, waar PHP niet van op de hoogte was:
GD tot/met 2.0.3 had:
Maar wat heeft GD 2.0.4 helaas (of niet):
Om dit te corrigeren zou je de source van GD kunnen veranderen (niet zo slim)
Handiger is echter een paar regeltjes bij PHP aan te passen:
Verander in de bestanden /ext/gd/gd.c regel 1014, 1017 en 1208
en bij /ext/gd/gd_ctx.c regel 70 en 98
en de rest zou je zelf moeten kunnen.
Dat was het, veel plezier ermee.
Na 3 dagen ploeteren en zweten heb ik eindelijk m'n apache kunnen compileren, maar nu m'n php nog... ownee... een fout.
Dat scenario is helaas alom bekend
Het doel was om PHP 4.0.2 te compileren met GD 2.0.4, dus heb ik braaf bij http://www.boutell.com/gd de laatste GD gedownload.
Toen GD (met freetype 2.1.2) gecompileer en geïnstalleerd.
De volgende klus was PHP.
Die heb ik vervolgens geconfigureerd met ./configure
met o.a. de parameter: --with-gd
Dit ging helaas elke keer fout.
De reden: een fout in de source van PHP!!!
Hoe is het mogelijk!!
GD 2.0.4 heeft namelijk iets nieuws, waar PHP niet van op de hoogte was:
GD tot/met 2.0.3 had:
C:
1
2
3
4
5
6
7
8
9
10
11
| typedef struct gdIOCtx { int (*getC)(struct gdIOCtx*); int (*getBuf)(struct gdIOCtx*, void*, int); void (*putC)(struct gdIOCtx*, int); int (*putBuf)(struct gdIOCtx*, const void*, int); int (*seek)(struct gdIOCtx*, const int); long (*tell)(struct gdIOCtx*); void (*free)(struct gdIOCtx*); } gdIOCtx; |
Maar wat heeft GD 2.0.4 helaas (of niet):
C:
Je ziet het, free heet hier gd_free.1
2
3
4
5
6
7
8
9
10
11
| typedef struct gdIOCtx { int (*getC)(struct gdIOCtx*); int (*getBuf)(struct gdIOCtx*, void*, int); void (*putC)(struct gdIOCtx*, int); int (*putBuf)(struct gdIOCtx*, const void*, int); int (*seek)(struct gdIOCtx*, const int); long (*tell)(struct gdIOCtx*); void (*gd_free)(struct gdIOCtx*); } gdIOCtx; |
Om dit te corrigeren zou je de source van GD kunnen veranderen (niet zo slim)
Handiger is echter een paar regeltjes bij PHP aan te passen:
Verander in de bestanden /ext/gd/gd.c regel 1014, 1017 en 1208
C:
in1
| io_ctx->free |
C:
1
| io_ctx->gd_free |
en bij /ext/gd/gd_ctx.c regel 70 en 98
C:
in1
| ctx->free |
C:
1
| ctx->gd_free |
en de rest zou je zelf moeten kunnen.
Dat was het, veel plezier ermee.