В настоящее время мы запускаем PHP 5.2.13 на сервере Solaris 10. Мне нужно включить некоторые дополнительные функции, поэтому я запустил сценарий настройки, но получаю некоторые ошибки.
Я сделал 'export CFLAGS = "- m64"', чтобы убедиться, что GCC скомпилирован в 64-битном режиме, но похоже, что у меня нет 64-битной версии libiconv.so. Я пробовал запускать скрипт с --without-iconv, но без кубиков. Вот конец моего config.log:
configure:20017: checking for strftime
configure:20471: checking whether to enable LIBXML support
configure:20519: checking libxml2 install dir
configure:20548: checking for xml2-config path
configure:20706: checking whether libxml build works
configure:20733: gcc -o conftest -m64 -D_POSIX_PTHREAD_SEMANTICS -R/usr/ucblib -L/usr/ucblib -R/usr/local/lib/../lib/gcc/sparc-sun-solaris2.10/3.4.6 -L/usr/local/lib/../lib/gcc/sparc-sun-solaris2.10/3.4.6 -R/usr/local/lib -L/usr/local/lib conftest.c
-lrt -lresolv -lm -lnsl -lsocket -lgcc -lxml2 -lz -liconv -lm -lsocket -lnsl 1>&5
ld: fatal: file /usr/local/lib/libiconv.so: wrong ELF class: ELFCLASS32
ld: fatal: File processing errors. No output written to conftest
collect2: ld returned 1 exit status
configure: failed program was:
#line 20722 "configure"
#include "confdefs.h"
char xmlInitParser();
int main() {
xmlInitParser();
return 0;
}
Есть ли способ обойти это? Я бьюсь об это головой со вчерашнего дня. Если это поможет, вот моя строка настройки:
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/lib --with-libxml-dir=/usr/local --with-zlib=/usr/local --with-xpm-dir=/usr/local --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-apxs2=/usr/local/apache2/bin/apxs --without-pgsql --with-jpeg-dir=/usr/local/lib --with-zlib-dir=/usr/local/lib --with-gd=/usr/local --enable-mbstring --enable-exif --enable-force-cgi-redirect --enable-sockets --with-png-dir=/usr/local/lib --with-curl=/usr/local --with-ldap=/usr/local --with-openssl=/usr/local/ssl --with-gettext --with-pcre-dir=/usr/local --with-freetype-dir=/usr/local --with-mssql=/usr/local/freetds --with-readline --enable-soap
В моем случае для компиляции PHP 5.4.7 мне также пришлось добавить переменную env PHP_LDFLAGS: LDFLAGS = "- L / opt / selfcompiled / libs / 64 -L / lib / 64 -L / usr / sfw / lib / 64 -m64 "PHP_LDFLAGS = $ LDFLAGS
Это всегда было моей самой большой проблемой с Solaris. По сути, если вы собираетесь что-то компилировать, вам нужно убедиться, что ВСЕ из следующего верны:
CFLAGS
/ CXXFLAGS
(для C ++)LDFLAGS
(для компоновщика)LD_LIBRARY_PATH
Убедитесь, что все включаемые каталоги (указанные с -I
) и каталоги библиотек (-R
и / или -L
) соответствуют архитектуре, для которой вы строите. Для Solaris, gcc
часто смотрит на /usr/lib
, /usr/sfw/lib
и т.д., но если вы хотите 64-разрядную версию, вам нужно скомпилировать /usr/lib/64
, /usr/sfw/lib/64
и т. д. - указав gcc -m64
для этого недостаточно.
Вы можете проверить ISA существующей библиотеки iconv, используя ldd
и file
. Если вы сами скомпилировали libiconv, вам нужно будет перекомпилировать его, иначе найдите другой бинарный исходный код или ... перекомпилируйте его :-)