Hrm.. Ok, so the problem isn't as clearcut as I thought. A walkthrough:
Install the gd-1.8.x and gd-devel-1.8.x packages on some common Linux distro. I am using an old rh-7.1 box with a bunch of upgraded packages here. Make sure it installs a /usr/lib/libgd.so Then download gd-2.0.1.tar.gz from boutell.com and build it in /some/dir by changing GD's Makefile's LIBS line to: LIBS=libgd.a -lpng -lz -ljpeg -lfreetype -lm And type: make libgd.a to get the static library. Now with a clean php-4.2.0-dev checkout do: ./configure --with-gd=/home/rasmus/gd-2.0.1 --with-png-dir=/usr \ --with-zlib --with-freetype-dir=/usr --enable-gd-native-ttf \ --enable-gd-imgstrttf --with-jpeg-dir=/usr make ./php -v and it *works*... Weird. also if I just add --with-apxs to the above it still works. Running ldd on libphp4.so at this point gives me: ~/php4> ldd .libs/libphp4.so libdl.so.2 => /lib/libdl.so.2 (0x40178000) libpam.so.0 => /lib/libpam.so.0 (0x4017c000) libpng.so.2 => /usr/lib/libpng.so.2 (0x40184000) libz.so.1 => /usr/lib/libz.so.1 (0x401a5000) libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x401b4000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x401d3000) libresolv.so.2 => /lib/libresolv.so.2 (0x40200000) libm.so.6 => /lib/libm.so.6 (0x40212000) libnsl.so.1 => /lib/libnsl.so.1 (0x40234000) libc.so.6 => /lib/libc.so.6 (0x4024b000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000) The final link line for this working build was: /bin/sh /home/rasmus/php4/libtool --silent --mode=link gcc -I. -I/home/rasmus/php4/ -I/home/rasmus/php4/main -I/home/rasmus/php4 -I/usr/include/apache -I/home/rasmus/php4/Zend -I/home/rasmus/gd-2.0.1/ -I/home/rasmus/php4/ext/mysql/libmysql -I/home/rasmus/php4/ext/xml/expat -DLINUX=22 -DEAPI -DEAPI_MM -DEAPI_MM_CORE_PATH=/var/run/httpd.mm -I/home/rasmus/php4/TSRM -g -O2 -prefer-pic -o libphp4.la -rpath /home/rasmus/php4/libs -avoid-version -L/home/rasmus/gd-2.0.1/ -R /home/rasmus/gd-2.0.1/ stub.lo Zend/libZend.la sapi/apache/libsapi.la main/libmain.la regex/libregex.la /home/rasmus/php4/ext/zlib/libzlib.la /home/rasmus/php4/ext/gd/libgd.la /home/rasmus/php4/ext/mysql/libmysql.la /home/rasmus/php4/ext/overload/liboverload.la /home/rasmus/php4/ext/pcre/libpcre.la /home/rasmus/php4/ext/posix/libposix.la /home/rasmus/php4/ext/session/libsession.la /home/rasmus/php4/ext/standard/libstandard.la /home/rasmus/php4/ext/xml/libxml.la TSRM/libtsrm.la -lpam -lgd -lpng -lz -ljpeg -lz -lcrypt -lresolv -lm -ldl -lnsl -lresolv -lcrypt -ldl Looks good. We have a -L/home/rasmus/gd-2.0.1/ -R /home/rasmus/gd-2.0.1/ there. Now, here comes the problem. Try building using: ./configure --with-pdflib=/usr/local --with-gd=/home/rasmus/gd-2.0.1 \ --with-jpeg-dir=/usr --with-freetype-dir=/usr \ --enable-gd-native-ttf' --enable-gd-imgstrttf \ --with-jpeg-dir=/usr --with-png-dir=/usr \ --with-xpm-dir=/usr/X11R6 --enable-exif \ --with-config-file-path=/etc --enable-debug \ --with-mysql=/usr --enable-inline-optimization \ --with-pgsql=/usr --with-zlib-dir=/usr \ --with-expat=/usr --enable-xslt --with-xslt-sablot=/usr \ --with-imap --with-gettext --with-kerberos --with-imap-ssl \ --with-mcrypt=/usr/local --with-ldap \ --with-pspell --with-apxs=/usr/sbin/apxs gives me: Cannot load /usr/lib/apache/libphp4.so into server: /usr/lib/apache/libphp4.so: undefined symbol: gdImageColorClosestAlpha And the ldd clearly shows that the wrong libgd.so.1.8 is now suddenly being pulled in. What happened? Why did adding a bunch of other stuff suddenly switch me from using /home/rasmus/gd-2.0.1/libgd.a to using /usr/lib/libgd.so.1.8 ? ~/php4/.libs> ldd libphp4.so libdl.so.2 => /lib/libdl.so.2 (0x4029f000) libpam.so.0 => /lib/libpam.so.0 (0x402a3000) libcrypto.so.2 => /lib/libcrypto.so.2 (0x402ab000) libssl.so.2 => /lib/libssl.so.2 (0x40382000) libsablot.so.0 => /usr/local/lib/libsablot.so.0 (0x403b3000) libexpat.so.0 => /usr/lib/libexpat.so.0 (0x4045f000) libpspell.so.4 => /usr/lib/libpspell.so.4 (0x4047d000) libpq.so.2 => /usr/lib/libpq.so.2 (0x40497000) libpdf.so.1 => /usr/local/lib/libpdf.so.1 (0x404a7000) libz.so.1 => /usr/lib/libz.so.1 (0x40532000) libpng.so.2 => /usr/lib/libpng.so.2 (0x40541000) libmcrypt.so.4 => /usr/local/lib/libmcrypt.so.4 (0x40562000) libltdl.so.3 => /usr/local/lib/libltdl.so.3 (0x40568000) libldap.so.2 => /usr/lib/libldap.so.2 (0x4056e000) liblber.so.2 => /usr/lib/liblber.so.2 (0x40597000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x405a1000) libgd.so.1.8 => /usr/lib/libgd.so.1.8 (0x405cf000) libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40602000) libXpm.so.4 => /usr/X11R6/lib/libXpm.so.4 (0x406f8000) libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40707000) libresolv.so.2 => /lib/libresolv.so.2 (0x40726000) libm.so.6 => /lib/libm.so.6 (0x40738000) libnsl.so.1 => /lib/libnsl.so.1 (0x4075b000) libgssapi_krb5.so.2 => /usr/kerberos/lib/libgssapi_krb5.so.2 (0x40772000) libkrb5.so.3 => /usr/kerberos/lib/libkrb5.so.3 (0x40785000) libk5crypto.so.3 => /usr/kerberos/lib/libk5crypto.so.3 (0x407dd000) libcom_err.so.2 => /lib/libcom_err.so.2 (0x407ee000) libc.so.6 => /lib/libc.so.6 (0x407f1000) libpspell-modules.so.1 => /usr/lib/libpspell-modules.so.1 (0x40927000) libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x40929000) libsasl.so.7 => /usr/lib/libsasl.so.7 (0x4096c000) libcom_err.so.3 => /usr/kerberos/lib/libcom_err.so.3 (0x40976000) libssl.so.1 => /usr/lib/libssl.so.1 (0x40979000) libcrypto.so.1 => /usr/lib/libcrypto.so.1 (0x409a5000) libttf.so.2 => /usr/lib/libttf.so.2 (0x40a62000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000) libgdbm.so.2 => /usr/lib/libgdbm.so.2 (0x40a8c000) The final link line for this one was: gcc -shared stub.lo -Wl,--whole-archive Zend/.libs/libZend.al sapi/apache/.libs/libsapi.al main/.libs/libmain.al regex/.libs/libregex.al /home/rasmus/php4/ext/zlib/.libs/libzlib.al /home/rasmus/php4/ext/exif/.libs/libexif.al /home/rasmus/php4/ext/gd/.libs/libgd.al /home/rasmus/php4/ext/gettext/.libs/libgettext.al /home/rasmus/php4/ext/imap/.libs/libimap.al /home/rasmus/php4/ext/ldap/.libs/libldap.al /home/rasmus/php4/ext/mcrypt/.libs/libmcrypt.al /home/rasmus/php4/ext/mysql/.libs/libmysql.al /home/rasmus/php4/ext/overload/.libs/liboverload.al /home/rasmus/php4/ext/pcre/.libs/libpcre.al /home/rasmus/php4/ext/pdf/.libs/libpdf.al /home/rasmus/php4/ext/pgsql/.libs/libpgsql.al /home/rasmus/php4/ext/posix/.libs/libposix.al /home/rasmus/php4/ext/pspell/.libs/libpspell.al /home/rasmus/php4/ext/session/.libs/libsession.al /home/rasmus/php4/ext/standard/.libs/libstandard.al /home/rasmus/php4/ext/xml/.libs/libxml.al /home/rasmus/php4/ext/xslt/.libs/libxslt.al TSRM/.libs/libtsrm.al /usr/lib/mysql/libmysqlclient.a -Wl,--no-whole-archive -Wl,--rpath -Wl,/usr/local/lib -Wl,--rpath -Wl,/usr/local/lib -Wl,--rpath -Wl,/usr/X11R6/lib -Wl,--rpath -Wl,/home/rasmus/gd-2.0.1/ -Wl,--rpath -Wl,/usr/kerberos/lib -Wl,--rpath -Wl,/usr/lib/mysql -L/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../.. -L/usr/lib/gcc-lib/i386-redhat-linux/2.96 -L/tmp/19246-i386/BUILD/pspell-.12.2/modules/.libs -L/usr/lib -L/usr/X11R6/lib -L/home/rasmus/gd-2.0.1/ -L/usr/kerberos/lib -L/usr/local/lib -L/usr/lib/mysql Zend/.libs/libZend.al -ldl sapi/apache/.libs/libsapi.al main/.libs/libmain.al regex/.libs/libregex.al /home/rasmus/php4/ext/zlib/.libs/libzlib.al /home/rasmus/php4/ext/exif/.libs/libexif.al /home/rasmus/php4/ext/gd/.libs/libgd.al /home/rasmus/php4/ext/gettext/.libs/libgettext.al /home/rasmus/php4/ext/imap/.libs/libimap.al /home/rasmus/php4/ext/ldap/.libs/libldap.al /home/rasmus/php4/ext/mcrypt/.libs/libmcrypt.al /home/rasmus/php4/ext/mysql/.libs/libmysql.al /home/rasmus/php4/ext/overload/.libs/liboverload.al /home/rasmus/php4/ext/pcre/.libs/libpcre.al /home/rasmus/php4/ext/pdf/.libs/libpdf.al /home/rasmus/php4/ext/pgsql/.libs/libpgsql.al /home/rasmus/php4/ext/posix/.libs/libposix.al /home/rasmus/php4/ext/pspell/.libs/libpspell.al /home/rasmus/php4/ext/session/.libs/libsession.al /home/rasmus/php4/ext/standard/.libs/libstandard.al /home/rasmus/php4/ext/xml/.libs/libxml.al /home/rasmus/php4/ext/xslt/.libs/libxslt.al TSRM/.libs/libtsrm.al -lpam -lcrypto -lssl -lc-client /usr/local/lib/libsablot.so /usr/lib/libexpat.so /usr/lib/libpspell.so -lpq /usr/local/lib/libpdf.so -lz -lpng /usr/lib/mysql/libmysqlclient.a -lz /usr/local/lib/libmcrypt.so /usr/local/lib/libltdl.so -lldap -llber -lcrypt -lpam -lgd -lX11 -lXpm -lpng -lz /usr/lib/libjpeg.so -lz -lcrypt -lresolv -lm -ldl -lnsl -lresolv -lcrypt -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -ldl -Wl,-soname -Wl,libphp4.so -o .libs/libphp4.so Nasty. I don't seem to get a gcc -shared line for the simpler flags. Will have to investigate that, but there is something fishy here. Building again with the same mega-flags as above but removing --with-apxs it works again. Now ldd shows this: ~/php4> ldd ./php libdl.so.2 => /lib/libdl.so.2 (0x4002b000) libpam.so.0 => /lib/libpam.so.0 (0x4002f000) libcrypto.so.2 => /lib/libcrypto.so.2 (0x40037000) libssl.so.2 => /lib/libssl.so.2 (0x4010d000) libsablot.so.0 => /usr/local/lib/libsablot.so.0 (0x4013f000) libexpat.so.0 => /usr/lib/libexpat.so.0 (0x401eb000) libpspell.so.4 => /usr/lib/libpspell.so.4 (0x40209000) libpspell-modules.so.1 => /usr/lib/libpspell-modules.so.1 (0x40223000) libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x40225000) libc.so.6 => /lib/libc.so.6 (0x40268000) libpq.so.2 => /usr/lib/libpq.so.2 (0x4039e000) libpdf.so.1 => /usr/local/lib/libpdf.so.1 (0x403ae000) libz.so.1 => /usr/lib/libz.so.1 (0x40439000) libpng.so.2 => /usr/lib/libpng.so.2 (0x40447000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x40468000) libmcrypt.so.4 => /usr/local/lib/libmcrypt.so.4 (0x40495000) libltdl.so.3 => /usr/local/lib/libltdl.so.3 (0x4049c000) libldap.so.2 => /usr/lib/libldap.so.2 (0x404a2000) liblber.so.2 => /usr/lib/liblber.so.2 (0x404cb000) libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x404d5000) libXpm.so.4 => /usr/X11R6/lib/libXpm.so.4 (0x405cb000) libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x405da000) libresolv.so.2 => /lib/libresolv.so.2 (0x405fa000) libm.so.6 => /lib/libm.so.6 (0x4060c000) libnsl.so.1 => /lib/libnsl.so.1 (0x4062e000) libgssapi_krb5.so.2 => /usr/kerberos/lib/libgssapi_krb5.so.2 (0x40645000) libkrb5.so.3 => /usr/kerberos/lib/libkrb5.so.3 (0x40658000) libk5crypto.so.3 => /usr/kerberos/lib/libk5crypto.so.3 (0x406b0000) libcom_err.so.3 => /usr/kerberos/lib/libcom_err.so.3 (0x406c2000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) libsasl.so.7 => /usr/lib/libsasl.so.7 (0x406c5000) libssl.so.1 => /usr/lib/libssl.so.1 (0x406cf000) libcrypto.so.1 => /usr/lib/libcrypto.so.1 (0x406fb000) libgdbm.so.2 => /usr/lib/libgdbm.so.2 (0x407b7000) So by building the command line version we are suddenly using the static libgd.a again. And just to make triple-sure: ~/php4> nm -o php | grep gdImageColorClosestAlpha php:081ebf74 T gdImageColorClosestAlpha ~/php4> ./php -i | grep GD <tr valign="baseline" bgcolor="#cccccc"><td bgcolor="#ccccff" ><b>GD Support</b></td><td align="left">enabled</td></tr> <tr valign="baseline" bgcolor="#cccccc"><td bgcolor="#ccccff" ><b>GD Version</b></td><td align="left">2.0 or higher</td></tr> We do indeed have the right GD2 libgd.a So, somewhere between small set of flags used with apxs and the bigger set, something is affecting it causing it to mess up which libs are being pulled in. -Rasmus -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php