views:

1303

answers:

4

Currently I'm trying to install PHP 5.3.0 on some Linux testing server. As we've urgently waited for ext/intl we want to check out the features it provides. I'm running configure successfully with the following arguments

./configure
    --with-apxs2=/usr/local/apache2/bin/apxs
    --prefix=/usr/local/php
    --with-zlib-dir=/usr/local/zlib
    --with-imap=/.../imap-2006k
    --with-imap-ssl
    --with-openssl=shared
    --with-iconv=shared
    --with-zlib=shared
    --with-curl=shared
    --with-curlwrappers
    --enable-exif
    --with-ldap=shared,/usr/local/openldap
    --with-ldap-sasl
    --enable-mbstring=shared
    --with-mcrypt
    --enable-soap=shared
    --enable-sockets
    --enable-zip=shared
    --enable-pdo=shared
    --with-pdo-sqlite=shared
    --with-sqlite=shared
    --with-mysql=shared,/usr/local/mysql
    --with-pdo-mysql=shared,/usr/local/mysql
    --with-mysqli=shared,/usr/local/mysql/bin/mysql_config
    --with-mhash=shared,/usr/local/mhash
    --with-libxml-dir=/usr/local/libxml2
    --with-xsl=shared,/usr/local/libxslt
    --enable-xmlreader=shared
    --enable-xmlwriter=shared
    --with-gmp=shared
    --with-icu-dir=/usr/local/icu
    --enable-intl

ICU 4.2 is located at /usr/local/icu and PHP 5.2.9 compiled flawlessly (without the int- and icu-options). But when I complie the PHP 5.3.0 source I get a whole lot of error messages of the kind

ext/intl/grapheme/.libs/grapheme_util.o(.text+0xbab):/.../php-5.3.0/ext/intl/grapheme/grapheme_util.c:208: undefined reference to `ubrk_close_4_2'

I'm quite sure it has something to do with not finding the shared libraries. Setting

export LD_LIBRARY_PATH=/usr/local/icu/lib

doesn't help.

Can anyone point me to some solution? I'm rather clueless - and I'm no real expert in these things...

EDIT:

I just rechecked and made sure that the various icu-libraries and the respective soft links are all located in /usr/local/icu/lib:

lrwxrwxrwx  1 root root       20 Jul  1 09:56 libicudata.so -> libicudata.so.42.0.1
lrwxrwxrwx  1 root root       20 Jul  1 09:56 libicudata.so.42 -> libicudata.so.42.0.1
-rw-r--r--  1 root root 16015140 Jul  1 09:56 libicudata.so.42.0.1
lrwxrwxrwx  1 root root       20 Jul  1 09:56 libicui18n.so -> libicui18n.so.42.0.1
lrwxrwxrwx  1 root root       20 Jul  1 09:56 libicui18n.so.42 -> libicui18n.so.42.0.1
-rwxr-xr-x  1 root root  2454770 Jul  1 09:56 libicui18n.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicuio.so -> libicuio.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicuio.so.42 -> libicuio.so.42.0.1
-rwxr-xr-x  1 root root    65299 Jul  1 09:56 libicuio.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicule.so -> libicule.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicule.so.42 -> libicule.so.42.0.1
-rwxr-xr-x  1 root root   356125 Jul  1 09:56 libicule.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libiculx.so -> libiculx.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libiculx.so.42 -> libiculx.so.42.0.1
-rwxr-xr-x  1 root root    75110 Jul  1 09:56 libiculx.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicutu.so -> libicutu.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicutu.so.42 -> libicutu.so.42.0.1
-rwxr-xr-x  1 root root   159330 Jul  1 09:56 libicutu.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicuuc.so -> libicuuc.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicuuc.so.42 -> libicuuc.so.42.0.1
-rwxr-xr-x  1 root root  1660769 Jul  1 09:56 libicuuc.so.42.0.1

make check runs tons of tests - all of them successfully:

[All tests passed successfully...]
Elapsed Time: 00:00:25.000
make[2]: Leaving directory `/.../icu-4.2/source/test/cintltst'
---------------
ALL TESTS SUMMARY:
All tests OK:  testdata intltest iotest cintltst
make[1]: Leaving directory `/.../icu-4.2/source/test'
make[1]: Entering directory `/.../icu-4.2/source'
verifying that icu-config --selfcheck can operate
verifying that make -f Makefile.inc selfcheck can operate
PASS: config selfcheck OK
make[1]: Leaving directory `/.../icu-4.2/source'

EDIT: answers to VolkerK's questions

I installed ICU 4.2 from source and as I wrote above the build process, the unit-tests and the installation all went fine.

/usr/local/icu/bin/icu-config --version
4.2.0.1

/usr/local/icu/bin/icu-config --prefix
/usr/local/icu

/usr/local/icu/bin/icu-config --cppflags-searchpath
-I/usr/local/icu/include

/usr/local/icu/bin/icu-config --ldflags --ldflags-icuio
-lpthread -lm   -L/usr/local/icu/lib -licui18n -licuuc -licudata  -lpthread -lm   -licuio

objdump -C /usr/local/icu/lib/libicuuc.so.42.0.1
// doesn't work because of unrecognized argument -C

EDIT regarding VolkerK's comment:

No, there has been no switch of the compiler involved - I ran both build processes directly one after the other. objdump /usr/local/icu/lib/libicuuc.so.42.0.1 doesn't work either but I managed to run

objdump -t /usr/local/icu/lib/libicuuc.so.42.0.1 | grep ubrk_close
00000000000d2484 g     F .text  000000000000002d              ubrk_close_4_2

Don't know if this information can help.

EDIT on VolkerK's edit1 and edit2:

I think there's the rub - there is indeed another icu-version on the sytem; at least in parts (there is no other icu-config for example; only the one in /usr/local/icu/bin).

gcc -lpthread -lm -L/usr/local/icu/lib -licui18n -licuuc -licudata -lpthread -lm -licuio -print-file-name=libicuuc.so returns

/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/../../../../lib64/libicuuc.so

while gcc -lpthread -lm -L/usr/local/icu/lib -licui18n -licuuc -licudata -lpthread -lm -licuio -print-file-name=libicuuc.so.42 returns

libicuuc.so.42

So the problem seems to be, how to get the new lib-path into the build process?? By the way, I learned a lot from your answers - thank's to all of you.

I also tried to compile your simple test program - and it also fails with the same undefined reference error, most likely due to the same reason PHP won't compile.

How can I get rid of the reference to the old icu-library in the lib-path or how do I prioritize the new icu-library-path?

A: 

When you call

export LD_LIBRARY_PATH=/usr/local/icu/lib

then you are overwriting the currently set path. So it could be that it will find ICU but it won't find any of the other libraries it needs. Try this instead:

export LD_LIBRARY_PATH=/usr/local/icu/lib:${LD_LIBRARY_PATH}

If that doesn't help I can think of two things to try:

  1. Is the library in the right place? Perhaps your installation moved in somewhere else, like /usr/local/lib/icu instead?
  2. Does ICU work? Try the "make check" target for ICU. Try compiling/running the test suite included with ICU, or try to compile and run a trivial ICU example. This presentation (PPT) has a few trivial examples.

EDIT

I think I figured it out. It looks like php-intl only works with libicu 3.6 or 3.8. I have googled for ever Linux distro shipping php-intl and they all depends on libicu 3.8 even when they are also shipping libicu 4.0 or later. The last changelog before intl became part of php itself indicates the same.

I suggest installing libicu 3.8 and trying again.

Sander Marechal
I thought about that too, but: the error messages are the same with the icu-lib-dir not in LD_LIBRARY_PATH, with with the icu-lib-dir as the sole dir in LD_LIBRARY_PATH and with icu-lib-dir appended to LD_LIBRARY_PATH. Compilation just doesn't seem to find the libraries.
Stefan Gehrig
I updated my answer. This is all I could find.
Sander Marechal
Another update. I think you need libicu 3.8.
Sander Marechal
Sorry... Same error again with ICU 3.8.1.
Stefan Gehrig
A: 

There's a good chance that ld does not know where to find those libraries. You will have to either update LD_LIBRARY_PATH (each time), or have ldconfig learn of your new library.

You can either:

  • Install it in /usr/local/lib or /usr/lib
  • Add its location to /etc/ld.so.conf and re-run /sbin/ldconfig

Right now, even if ldconfig was run by whatever installed the library, ldconfig would have no idea of its location because /usr/local/icu/lib is not in its scope. If the library was installed to /usr/local/lib/icu, ldconfig would know where to find it, and you would not have to specify the LD path manually.

I recommend just re-installing the library to /usr/local/lib and running ldconfig prior to modifying ld.so.conf, however modifying that file is no great taboo if you just want to get it working.

Tim Post
Sorry - no. That didn't do the trick. Neither editing the ld.so.conf nor installing icu to the "standard" library path showed some result. Could there be some problem related to the 64bit environment the build process runs on?
Stefan Gehrig
+2  A: 

The problem seems to be that the binary is linked against the wrong (shared) library files.
First a long, boring explaination of what I think the problem is. Keep in mind that I'm not a linux expert. I really want you to understand my train of thoughts so that you can decide if it's feasible and/or where I'm wrong.
The first (crude) solution is easily reversible. Run another ./configure and all changes are history. I think it's pretty save.

Why do you have icu 4-2 specific dependencies in the first place? Let's take a look at a source file of php's intl extension (ext/intl/grapheme/grapheme_string.c)

#include <unicode/ubrk.h>
...
PHP_FUNCTION(grapheme_substr)
{
   ...
   ubrk_close(bi);
   ...

Until now there's no version specific code. grapheme_string.c looks the same whether you use icu 3.4 or icu 4.2. Where does the ubrk_close_4_2 come from?
When you run the "./configure ... --with-icu-dir=/usr/local/icu" command the file ext/intl/config.m4 is executed. In this process icu-config is called to get the include path and library files required to build php. You provided a path to your icu installation which boils down to that

ICU_CONFIG="$PHP_ICU_DIR/bin/icu-config"
ICU_INCS=`$ICU_CONFIG --cppflags-searchpath`
ICU_LIBS=`$ICU_CONFIG --ldflags --ldflags-icuio`

is executed. You've tried icu-config yourself, so you know what it outputs and therefore what ICU_INCS and ICU_LIBS contain. ICU_INCS and ICU_LIBS are passed to gcc when the files are compiled/linked. gcc (apperently) didn't find unicode/ubrk.h in it's default directory, so it searched for the file in the additional include directories provided by ICU_INCS where it found the icu 4.2 include files. unicode/ubrk.h includes unicode/utypes.h which then includes unicode/urename.h - and again the icu 4.2 header files are included. In this case unicode/urename.h includes #define ubrk_close ubrk_close_4_2.
When the preprocessor is done ubrk_close(bi) has been replaced by ubrk_close_4_2(bi).

PHP_FUNCTION(grapheme_substr)
{
   ...
   ubrk_close_4_2(bi);
   ...

Now you have a version specific dependency, a reference to ubrk_close_4_2 that some library has to resolve.
So the include part did work. It did indeed find your icu 4.2 version and used its header files. So far so good.
Now for the linker part. In your case ICU_LIBS contains

-lpthread -lm -L/usr/local/icu/lib -licui18n -licuuc -licudata -lpthread -lm -licuio

-licuuc tells gcc "find me a library called 'icuuc' and use it". gcc then searches the LIB paths for files with a certain naming scheme that match "icuuc".
In this case libicuuc.so. Note that it doesn't look for a version specific file name, just libicuuc.so. Once it has found such a file it won't look for another one. First gcc searches in its default paths. Then it searches the additional library paths - in the order they are provided to gcc. I.e.

gcc -L/usr/lib -L/usr/local/lib -licuuc

will find /usr/lib/libicuuc.so if there is such a file and not /usr/local/lib/libicuuc.so (anymore). Meaning that either the default path or the order of the library path directives may be the cause of your trouble.
When your program is linked against shared objects a "special" loader is added to the code and the name of the shared object is stored in your program (at link time).
Every time your program is executed, first the (runtime) loader searches for the shared object (by its name), loads the code and replaces some stub jump addresses.
The shared object can "tell" the linker (i.e. at link time) the name of the shared object the loader should look for (SONAME property) at runtime. Take a look at the directory listing you provided in your question text

lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicuuc.so -> libicuuc.so.42.0.1
lrwxrwxrwx  1 root root       18 Jul  1 09:56 libicuuc.so.42 -> libicuuc.so.42.0.1
-rwxr-xr-x  1 root root  1660769 Jul  1 09:56 libicuuc.so.42.0.1

libicuuc.so, that's the file gcc is looking for when -licuuc is provided. The linker follows the symlink and uses libicuuc.so.42.0.1. This file "tells" the linker that the (runtime) loader should look for libicuuc.so.42, see http://userguide.icu-project.org/packaging#TOC-ICU-Versions.
The loader will follow the symlink and load libicuuc.so.42.0.1, or if there is another bugfix libicuuc.so.42.0.2, libicuuc.so.42.0.3, whatever libicuuc.so.42 is pointing to. libicuuc.so.42 will/should always point to an actual shared object that exports the icu 4.2 symbols. The code may have changed/fixed but the exported symbols stay the same. Your problem now is that gcc doesn't find libicuuc.so->libicuuc.so.42.0.1 but (let's say) libicuuc.so->libicuuc.so.34.x.y. This libicuuc.so.34.x.y doesn't export the icu 4.2 symbols, it doesn't provide ubrk_close_4_2 but ubrk_close_3_4. So, no ubrk_close_4_2 -> unresolved reference error.

First "solution" (crude): Let ./configure do its magic and then ... just edit the Makefile.
Open the Makefile (in the source top directory) in a text editor, search for INTL_SHARED_LIBADD= and replace

-licui18n -licuuc -licudata -licuio

in that line by

/usr/local/icu/lib/libicui18n.so.42 /usr/local/icu/lib/libicuuc.so.42 /usr/local/icu/lib/libicudata.so.42 /usr/local/icu/lib/libicuio.so.42

(leave any -lm -pthread ... as they are). Compile again.
This "tells" the gcc/linker not to search for the .so files but to use the specific ones. The result should be the same as if your library path was working (beacuse of SONAME).
But every time you run ./configure you have to apply the "fix" again.

Second solution: Remove the other libicuXY.so symlinks (that's where the word "backup" comes to mind), only keep the libicuXY.so->libicuXY.so.42.0.1 links. If there are no other libicuuc.so->>libicuuc.so.34.x.y links the gcc/linker can't find them and won't link against the old versions.
Again because of the SONAME property binaries that have already been linked against the old version will still function because "their" loader will search for the (still existing) libicuXY.so.34 files.
This will affect all subsequent linker runs, i.e. if you build another project that uses the older include files you will run into the same problem the other way around. The header files and the shared objects (at link time) must match.

VolkerK
Very good explanation and a lot of work - although I can test your proposed solutions not until Monday, I accepted your answer as it provides a very goog insight for dummies (like myself) into this topic (wich is somehow cryptic to me).
Stefan Gehrig
I know how frustrating this can be ;-) If it doesn't work let me know. imho gentoo in a virtual machine is a good thing to tinker with linux and new source packages (though there isn't a php 5.3 ebuild yet)
VolkerK
OK - the whole thing compiled now after I renamed all the libicuXY.so symlinks into libicuXY.so.old in /usr/lib64 so that the ICU 4.2 libs have been used. But now there seems to be another problem: A "make test" reveals 9999/9999 tests either failing or being skipped. But that also happens without icu being compiled into PHP. Next problem to solve ;-) Thanks again for your great efforts!
Stefan Gehrig
All of them fail? ouch! It still could be a problem with the shared objects though. The test logs will tell you ;-)
VolkerK
OK - found the problem. I didn't know that make test uses my php-cli.ini of the currently installed PHP version (/usr/local/php/lib/php-cli.ini). This lead to a warning beeing generated on each test that register_long_arrays is deprecated and thus resulting in a test failure on all tests.
Stefan Gehrig
A: 

I have the same problem trying to compile PHP 5.3.3 on Solaris 10 (10/09) using gcc4. The build dies here:

    /bin/sh /opt/system/software/src/php-5.3.3/libtool --silent --preserve-dup-deps --mode=compile gcc  -Imain/ -I/opt/system/software/src/php-5.3.3/main/ -DPHP_ATOM_INC -I/opt/system/software/src/php-5.3.3/include -I/opt/system/software/src/php-5.3.3/main -I/opt/system/software/src/php-5.3.3 -I/opt/system/software/src/php-5.3.3/ext/date/lib -I/opt/system/software/src/php-5.3.3/ext/ereg/regex -I/usr/include/libxml2 -I/opt/csw/include -I/opt/csw/include/freetype2 -I/opt/csw/mysql5/include/mysql -I/opt/system/software/src/php-5.3.3/ext/sqlite3/libsqlite -I/opt/system/software/src/php-5.3.3/TSRM -I/opt/system/software/src/php-5.3.3/Zend  -D_POSIX_PTHREAD_SEMANTICS  -I/opt/csw/include -g -O2    -c main/internal_functions_cli.c -o main/internal_functions_cli.lo 
/bin/sh /opt/system/software/src/php-5.3.3/libtool --silent --preserve-dup-deps --mode=link gcc -export-dynamic -I/opt/csw/include -g -O2   -L/usr/ucblib -L/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.3 -L/opt/csw/lib -L/opt/csw/mysql5/lib/mysql  -R /usr/ucblib -R /opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.3 -R /opt/csw/lib -R /opt/csw/mysql5/lib/mysql ext/date/php_date.lo ext/date/lib/astro.lo ext/date/lib/dow.lo ext/date/lib/parse_date.lo ext/date/lib/parse_tz.lo ext/date/lib/timelib.lo ext/date/lib/tm2unixtime.lo ext/date/lib/unixtime2tm.lo ext/date/lib/parse_iso_intervals.lo ext/date/lib/interval.lo ext/ereg/ereg.lo ext/ereg/regex/regcomp.lo ext/ereg/regex/regexec.lo ext/ereg/regex/regerror.lo ext/ereg/regex/regfree.lo ext/libxml/libxml.lo ext/openssl/openssl.lo ext/openssl/xp_ssl.lo ext/pcre/pcrelib/pcre_chartables.lo ext/pcre/pcrelib/pcre_ucd.lo ext/pcre/pcrelib/pcre_compile.lo ext/pcre/pcrelib/pcre_config.lo ext/pcre/pcrelib/pcre_exec.lo ext/pcre/pcrelib/pcre_fullinfo.lo ext/pcre/pcrelib/pcre_get.lo ext/pcre/pcrelib/pcre_globals.lo ext/pcre/pcrelib/pcre_info.lo ext/pcre/pcrelib/pcre_maketables.lo ext/pcre/pcrelib/pcre_newline.lo ext/pcre/pcrelib/pcre_ord2utf8.lo ext/pcre/pcrelib/pcre_refcount.lo ext/pcre/pcrelib/pcre_study.lo ext/pcre/pcrelib/pcre_tables.lo ext/pcre/pcrelib/pcre_try_flipped.lo ext/pcre/pcrelib/pcre_valid_utf8.lo ext/pcre/pcrelib/pcre_version.lo ext/pcre/pcrelib/pcre_xclass.lo ext/pcre/php_pcre.lo ext/sqlite3/sqlite3.lo ext/sqlite3/libsqlite/sqlite3.lo ext/zlib/zlib.lo ext/zlib/zlib_fopen_wrapper.lo ext/zlib/zlib_filter.lo ext/calendar/calendar.lo ext/calendar/dow.lo ext/calendar/french.lo ext/calendar/gregor.lo ext/calendar/jewish.lo ext/calendar/julian.lo ext/calendar/easter.lo ext/calendar/cal_unix.lo ext/ctype/ctype.lo ext/curl/interface.lo ext/curl/multi.lo ext/curl/streams.lo ext/dom/php_dom.lo ext/dom/attr.lo ext/dom/document.lo ext/dom/domerrorhandler.lo ext/dom/domstringlist.lo ext/dom/domexception.lo ext/dom/namelist.lo ext/dom/processinginstruction.lo ext/dom/cdatasection.lo ext/dom/documentfragment.lo ext/dom/domimplementation.lo ext/dom/element.lo ext/dom/node.lo ext/dom/string_extend.lo ext/dom/characterdata.lo ext/dom/documenttype.lo ext/dom/domimplementationlist.lo ext/dom/entity.lo ext/dom/nodelist.lo ext/dom/text.lo ext/dom/comment.lo ext/dom/domconfiguration.lo ext/dom/domimplementationsource.lo ext/dom/entityreference.lo ext/dom/notation.lo ext/dom/xpath.lo ext/dom/dom_iterators.lo ext/dom/typeinfo.lo ext/dom/domerror.lo ext/dom/domlocator.lo ext/dom/namednodemap.lo ext/dom/userdatahandler.lo ext/exif/exif.lo ext/fileinfo/fileinfo.lo ext/fileinfo/libmagic/apprentice.lo ext/fileinfo/libmagic/apptype.lo ext/fileinfo/libmagic/ascmagic.lo ext/fileinfo/libmagic/cdf.lo ext/fileinfo/libmagic/cdf_time.lo ext/fileinfo/libmagic/compress.lo ext/fileinfo/libmagic/encoding.lo ext/fileinfo/libmagic/fsmagic.lo ext/fileinfo/libmagic/funcs.lo ext/fileinfo/libmagic/is_tar.lo ext/fileinfo/libmagic/magic.lo ext/fileinfo/libmagic/print.lo ext/fileinfo/libmagic/readcdf.lo ext/fileinfo/libmagic/readelf.lo ext/fileinfo/libmagic/softmagic.lo ext/filter/filter.lo ext/filter/sanitizing_filters.lo ext/filter/logical_filters.lo ext/filter/callback_filter.lo ext/gd/gd.lo ext/gd/gdcache.lo ext/gd/libgd/gd_compat.lo ext/gd/libgd/gd_filter.lo ext/gd/libgd/gd_pixelate.lo ext/gd/libgd/gd_arc.lo ext/gd/libgd/gd_rotate.lo ext/gd/libgd/gd_color.lo ext/hash/hash.lo ext/hash/hash_md.lo ext/hash/hash_sha.lo ext/hash/hash_ripemd.lo ext/hash/hash_haval.lo ext/hash/hash_tiger.lo ext/hash/hash_gost.lo ext/hash/hash_snefru.lo ext/hash/hash_whirlpool.lo ext/hash/hash_adler32.lo ext/hash/hash_crc32.lo ext/hash/hash_salsa.lo ext/iconv/iconv.lo ext/intl/php_intl.lo ext/intl/intl_error.lo ext/intl/intl_convert.lo ext/intl/collator/collator.lo ext/intl/collator/collator_class.lo ext/intl/collator/collator_sort.lo ext/intl/collator/collator_convert.lo ext/intl/collator/collator_locale.lo ext/intl/collator/collator_compare.lo ext/intl/collator/collator_attr.lo ext/intl/collator/collator_create.lo ext/intl/collator/collator_is_numeric.lo ext/intl/collator/collator_error.lo ext/intl/common/common_error.lo ext/intl/formatter/formatter.lo ext/intl/formatter/formatter_main.lo ext/intl/formatter/formatter_class.lo ext/intl/formatter/formatter_attr.lo ext/intl/formatter/formatter_data.lo ext/intl/formatter/formatter_format.lo ext/intl/formatter/formatter_parse.lo ext/intl/normalizer/normalizer.lo ext/intl/normalizer/normalizer_class.lo ext/intl/normalizer/normalizer_normalize.lo ext/intl/locale/locale.lo ext/intl/locale/locale_class.lo ext/intl/locale/locale_methods.lo ext/intl/dateformat/dateformat.lo ext/intl/dateformat/dateformat_class.lo ext/intl/dateformat/dateformat_attr.lo ext/intl/dateformat/dateformat_data.lo ext/intl/dateformat/dateformat_format.lo ext/intl/dateformat/dateformat_parse.lo ext/intl/msgformat/msgformat.lo ext/intl/msgformat/msgformat_attr.lo ext/intl/msgformat/msgformat_class.lo ext/intl/msgformat/msgformat_data.lo ext/intl/msgformat/msgformat_format.lo ext/intl/msgformat/msgformat_helpers.lo ext/intl/msgformat/msgformat_parse.lo ext/intl/grapheme/grapheme_string.lo ext/intl/grapheme/grapheme_util.lo ext/intl/resourcebundle/resourcebundle.lo ext/intl/resourcebundle/resourcebundle_class.lo ext/intl/resourcebundle/resourcebundle_iterator.lo ext/intl/idn/idn.lo ext/json/json.lo ext/json/utf8_to_utf16.lo ext/json/utf8_decode.lo ext/json/JSON_parser.lo ext/ldap/ldap.lo ext/mysql/php_mysql.lo ext/pdo/pdo.lo ext/pdo/pdo_dbh.lo ext/pdo/pdo_stmt.lo ext/pdo/pdo_sql_parser.lo ext/pdo/pdo_sqlstate.lo ext/pdo_sqlite/pdo_sqlite.lo ext/pdo_sqlite/sqlite_driver.lo ext/pdo_sqlite/sqlite_statement.lo ext/phar/util.lo ext/phar/tar.lo ext/phar/zip.lo ext/phar/stream.lo ext/phar/func_interceptors.lo ext/phar/dirstream.lo ext/phar/phar.lo ext/phar/phar_object.lo ext/phar/phar_path_check.lo ext/posix/posix.lo ext/reflection/php_reflection.lo ext/session/session.lo ext/session/mod_files.lo ext/session/mod_mm.lo ext/session/mod_user.lo ext/simplexml/simplexml.lo ext/simplexml/sxe.lo ext/spl/php_spl.lo ext/spl/spl_functions.lo ext/spl/spl_engine.lo ext/spl/spl_iterators.lo ext/spl/spl_array.lo ext/spl/spl_directory.lo ext/spl/spl_exceptions.lo ext/spl/spl_observer.lo ext/spl/spl_dllist.lo ext/spl/spl_heap.lo ext/spl/spl_fixedarray.lo ext/sqlite/sqlite.lo ext/sqlite/sess_sqlite.lo ext/sqlite/pdo_sqlite2.lo ext/sqlite/libsqlite/src/opcodes.lo ext/sqlite/libsqlite/src/parse.lo ext/sqlite/libsqlite/src/encode.lo ext/sqlite/libsqlite/src/auth.lo ext/sqlite/libsqlite/src/btree.lo ext/sqlite/libsqlite/src/build.lo ext/sqlite/libsqlite/src/delete.lo ext/sqlite/libsqlite/src/expr.lo ext/sqlite/libsqlite/src/func.lo ext/sqlite/libsqlite/src/hash.lo ext/sqlite/libsqlite/src/insert.lo ext/sqlite/libsqlite/src/main.lo ext/sqlite/libsqlite/src/os.lo ext/sqlite/libsqlite/src/pager.lo ext/sqlite/libsqlite/src/printf.lo ext/sqlite/libsqlite/src/random.lo ext/sqlite/libsqlite/src/select.lo ext/sqlite/libsqlite/src/table.lo ext/sqlite/libsqlite/src/tokenize.lo ext/sqlite/libsqlite/src/update.lo ext/sqlite/libsqlite/src/util.lo ext/sqlite/libsqlite/src/vdbe.lo ext/sqlite/libsqlite/src/attach.lo ext/sqlite/libsqlite/src/btree_rb.lo ext/sqlite/libsqlite/src/pragma.lo ext/sqlite/libsqlite/src/vacuum.lo ext/sqlite/libsqlite/src/copy.lo ext/sqlite/libsqlite/src/vdbeaux.lo ext/sqlite/libsqlite/src/date.lo ext/sqlite/libsqlite/src/where.lo ext/sqlite/libsqlite/src/trigger.lo ext/standard/crypt_freesec.lo ext/standard/crypt_blowfish.lo ext/standard/crypt_sha512.lo ext/standard/crypt_sha256.lo ext/standard/php_crypt_r.lo ext/standard/array.lo ext/standard/base64.lo ext/standard/basic_functions.lo ext/standard/browscap.lo ext/standard/crc32.lo ext/standard/crypt.lo ext/standard/cyr_convert.lo ext/standard/datetime.lo ext/standard/dir.lo ext/standard/dl.lo ext/standard/dns.lo ext/standard/exec.lo ext/standard/file.lo ext/standard/filestat.lo ext/standard/flock_compat.lo ext/standard/formatted_print.lo ext/standard/fsock.lo ext/standard/head.lo ext/standard/html.lo ext/standard/image.lo ext/standard/info.lo ext/standard/iptc.lo ext/standard/lcg.lo ext/standard/link.lo ext/standard/mail.lo ext/standard/math.lo ext/standard/md5.lo ext/standard/metaphone.lo ext/standard/microtime.lo ext/standard/pack.lo ext/standard/pageinfo.lo ext/standard/quot_print.lo ext/standard/rand.lo ext/standard/soundex.lo ext/standard/string.lo ext/standard/scanf.lo ext/standard/syslog.lo ext/standard/type.lo ext/standard/uniqid.lo ext/standard/url.lo ext/standard/var.lo ext/standard/versioning.lo ext/standard/assert.lo ext/standard/strnatcmp.lo ext/standard/levenshtein.lo ext/standard/incomplete_class.lo ext/standard/url_scanner_ex.lo ext/standard/ftp_fopen_wrapper.lo ext/standard/http_fopen_wrapper.lo ext/standard/php_fopen_wrapper.lo ext/standard/credits.lo ext/standard/css.lo ext/standard/var_unserializer.lo ext/standard/ftok.lo ext/standard/sha1.lo ext/standard/user_filters.lo ext/standard/uuencode.lo ext/standard/filters.lo ext/standard/proc_open.lo ext/standard/streamsfuncs.lo ext/standard/http.lo ext/tokenizer/tokenizer.lo ext/tokenizer/tokenizer_data.lo ext/xml/xml.lo ext/xml/compat.lo ext/xmlreader/php_xmlreader.lo ext/xmlwriter/php_xmlwriter.lo TSRM/TSRM.lo TSRM/tsrm_strtok_r.lo TSRM/tsrm_virtual_cwd.lo main/main.lo main/snprintf.lo main/spprintf.lo main/php_sprintf.lo main/safe_mode.lo main/fopen_wrappers.lo main/alloca.lo main/php_scandir.lo main/php_ini.lo main/SAPI.lo main/rfc1867.lo main/php_content_types.lo main/strlcpy.lo main/strlcat.lo main/mergesort.lo main/reentrancy.lo main/php_variables.lo main/php_ticks.lo main/network.lo main/php_open_temporary_file.lo main/php_logos.lo main/output.lo main/getopt.lo main/streams/streams.lo main/streams/cast.lo main/streams/memory.lo main/streams/filter.lo main/streams/plain_wrapper.lo main/streams/userspace.lo main/streams/transports.lo main/streams/xp_socket.lo main/streams/mmap.lo main/streams/glob_wrapper.lo Zend/zend_language_parser.lo Zend/zend_language_scanner.lo Zend/zend_ini_parser.lo Zend/zend_ini_scanner.lo Zend/zend_alloc.lo Zend/zend_compile.lo Zend/zend_constants.lo Zend/zend_dynamic_array.lo Zend/zend_execute_API.lo Zend/zend_highlight.lo Zend/zend_llist.lo Zend/zend_opcode.lo Zend/zend_operators.lo Zend/zend_ptr_stack.lo Zend/zend_stack.lo Zend/zend_variables.lo Zend/zend.lo Zend/zend_API.lo Zend/zend_extensions.lo Zend/zend_hash.lo Zend/zend_list.lo Zend/zend_indent.lo Zend/zend_builtin_functions.lo Zend/zend_sprintf.lo Zend/zend_ini.lo Zend/zend_qsort.lo Zend/zend_multibyte.lo Zend/zend_ts_hash.lo Zend/zend_stream.lo Zend/zend_iterators.lo Zend/zend_interfaces.lo Zend/zend_exceptions.lo Zend/zend_strtod.lo Zend/zend_gc.lo Zend/zend_closures.lo Zend/zend_float.lo Zend/zend_objects.lo Zend/zend_object_handlers.lo Zend/zend_objects_API.lo Zend/zend_default_classes.lo Zend/zend_execute.lo sapi/cli/php_cli.lo sapi/cli/php_cli_readline.lo main/internal_functions_cli.lo -lresolv -lrt -lmysqlclient -lldap -liconv -liconv -lgd -lfreetype -lX11 -lXpm -lpng -lz -ljpeg -lcurl -lz -lssl -lcrypto -lm -lnsl -lsocket -lgcc -lxml2 -lz -lm -lsocket -lnsl -lcurl -lcares -lidn -lssl -lcrypto -llber -lldap -lsocket -lnsl -lssl -lcrypto -lsocket -lnsl -ldl -lz -lxml2 -lz -lm -lsocket -lnsl -lm -licui18n -licuuc -licudata -lm -licuio -lxml2 -lz -lm -lsocket -lnsl -lxml2 -lz -lm -lsocket -lnsl -lxml2 -lz -lm -lsocket -lnsl -lxml2 -lz -lm -lsocket -lnsl  -o sapi/cli/php
Undefined                       first referenced
 symbol                             in file
_ZTVN7icu_4_213FieldPositionE       ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_211FormattableC1Ev        ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_213UnicodeStringC1EPKti   ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_211Formattable9setStringERKNS_13UnicodeStringE ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_213UnicodeStringD1Ev      ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_213UnicodeStringC1Ev      ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_211Formattable8setInt64Ex ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_213UnicodeStringC1EPKt    ext/intl/msgformat/.libs/msgformat_helpers.o
_ZNK7icu_4_213MessageFormat6formatEPKNS_11FormattableEiRNS_13UnicodeStringERNS_13FieldPositionER10UErrorCode ext/intl/msgformat/.libs/msgformat_helpers.o
_ZNK7icu_4_211Formattable7getTypeEv ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_211Formattable7setDateEd  ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_27UMemorydaEPv            ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_211Formattable7setLongEi  ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_213UnicodeStringaSERKS0_  ext/intl/msgformat/.libs/msgformat_helpers.o
__gxx_personality_v0                ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_27UMemorynaEj             ext/intl/msgformat/.libs/msgformat_helpers.o
_ZNK7icu_4_213UnicodeString7extractEPtiR10UErrorCode ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_211Formattable9setDoubleEd ext/intl/msgformat/.libs/msgformat_helpers.o
_ZN7icu_4_213FieldPositionD1Ev      ext/intl/msgformat/.libs/msgformat_helpers.o
ld: fatal: Symbol referencing errors. No output written to sapi/cli/php
gmake: *** [sapi/cli/php] Error 1