Actualmente estoy tratando de instalar PHP 5.3.0 en algún servidor de prueba de Linux. Como hemos esperado urgentemente para ext/intl, queremos verificar las funciones que proporciona. estoy corriendo configure
con éxito con los siguientes argumentosProblemas para instalar PHP 5.3.0 con intl-support
./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
UCI 4.2 se encuentra en /usr/local/icu
y PHP 5.2.9 compila sin problemas (sin las Int- y la UCI-options). Pero cuando complie la fuente PHP 5.3.0 consigo una gran cantidad de mensajes de error del tipo
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'
Estoy bastante seguro de que tiene algo que ver con no encontrar las bibliotecas compartidas. Configuración
export LD_LIBRARY_PATH=/usr/local/icu/lib
no ayuda.
¿Alguien me puede indicar alguna solución? Estoy bastante desorientado - y yo soy un experto real en estas cosas ...
EDIT:
acabo vuelto a inspeccionar y se aseguró de que las distintas bibliotecas de la UCI y los respectivos enlaces de software son todos situado en /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
carreras toneladas de pruebas - todos ellos con éxito:
[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: respuestas a la questions
he instalado UCI 4.2 de origen y como he escrito sobre el proceso de construcción, la unidad de pruebas y la instalación fue bien todos VolkerK.
/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
EDITAR en relación con el comentario de VolkerK:
No, no ha habido ningún interruptor del compilador involucrados - Corrí tanto los procesos de construir directamente una tras otra. objdump /usr/local/icu/lib/libicuuc.so.42.0.1
no funciona bien, pero me las arreglé para ejecutar
objdump -t /usr/local/icu/lib/libicuuc.so.42.0.1 | grep ubrk_close
00000000000d2484 g F .text 000000000000002d ubrk_close_4_2
No sé si esta información puede ayudar.
EDIT en edit1 and edit2 de VolkerK:
Creo que ahí está el problema - en efecto, hay otra versión en la UCI en el Inglés; al menos en partes (no hay otra icu-config por ejemplo, solo la de /usr/local/icu/bin
).
gcc -lpthread -lm -L/usr/local/icu/lib -licui18n -licuuc -licudata -lpthread -lm -licuio -print-file-name=libicuuc.so
vuelve
/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/../../../../lib64/libicuuc.so
mientras gcc -lpthread -lm -L/usr/local/icu/lib -licui18n -licuuc -licudata -lpthread -lm -licuio -print-file-name=libicuuc.so.42
vuelve
libicuuc.so.42
Así que el problema parece ser, cómo obtener el nuevo lib-path en el proceso de construcción ?? Por cierto, aprendí mucho de sus respuestas, gracias a todos ustedes.
También intenté compilar su programa de prueba simple - y también falla con el mismo error de referencia indefinido, probablemente debido a la misma razón por la que PHP no compilará.
¿Cómo puedo deshacerme de la referencia a la antigua biblioteca icu en lib-path o cómo priorizo la nueva icu-library-path?
¿Funciona la ejecución de 'ldconfig/usr/local/icu/lib'? –
La salida de icu-config parece ser la correcta. Pity objdump -C no funciona. Afaik libicuuc.so debería exportar ubrk_close ... ¿Tal vez podrías probarlo sin parámetros? Solo "objdump /usr/local/icu/lib/libicuuc.so.42.0.1 ", debería mostrar qué símbolos/funciones han sido exportados por este objeto compartido. Vamos al ejemplo: solo copie y pegue entradas para ubrk_close/ubrk_close_4_2. Por cierto: no ha cambiado los compiladores (o la versión principal de gcc) entre construyendo ICU y PHP? – VolkerK
Editar pregunta después del comentario de Volker K. –