ld: фатальный: файл /usr/local/lib/libiconv.so: неправильный класс ELF: ELFCLASS32

Я пытаюсь собрать PHP 7.4 на Solaris sparc 10, но получаю такую ​​ошибку:

d_objects.lo Zend / zend_object_handlers.lo Zend / zend_objects_API.lo Zend / zend_default_classes.lo Zend / zend_inheritance.lo Zend / zend_smart_str.lo Zend / zend_cpuinfo. .lo sapi / apache2handler / apache_config.lo sapi / apache2handler / php_functions.lo main / internal_functions.lo -lresolv -lrt -liconv -lintl -lrt -lm -lnsl -lsocket -lgcc -o libphp7.la ld: fatal: file / usr / local / lib / libiconv.so: неправильный класс ELF: ELFCLASS32 ld: фатальный: ошибки обработки файла. В .libs / libphp7.so не записываются выходные данные *** Код ошибки 1 make: Неустранимая ошибка: команда не выполнена для целевого объекта `libphp7.la '

Моя конфигурация выглядит следующим образом:

./configure --disable-xmlwriter --disable-xmlreader --disable-simplexml --disable-xml --disable-dom --with-apxs2 = / usr / apache2 / bin / apxs --with-gd --with -zlib --disable-ipv6 --with-jpeg-dir = / usr / local --with-png-dir = / usr / local --with-freetype-dir = / usr / local --without-pear - with-openssl --with-mysqli --enable-bcmath --enable-ctype --enable-mbstring --with-gettext --prefix = / usr / php --without-libxml OPENSSL_CFLAGS = -I / usr / include / openssl OPENSSL_LIBS = -L / usr / local / ssl / include SQLITE_CFLAGS = -I / usr / php / include / php / ext SQLITE_LIBS = -L / usr / php / include / php / ext ZLIB_CFLAGS = -I / usr / include ZLIB_LIBS = -L / usr / include ONIG_CFLAGS = -I / usr / local / include / php / ext / mbstring ONIG_LIBS = -L / local / include / php / ext / mbstring
--with-external-pcre
--with-pcre-jit
PCRE2_LIBS = -L / app / INSTALL_FILES / php-7.4.13 / ext / pcre / pcre2lib
PCRE2_CFLAGS = -I / app / INSTALL_FILES / php-7.4. 13 / ext / pcre / pcre2lib
SQLITE_LIBS = -L / app / INSTALL_FILES / php-7.2.5 / ext / sqlite3 / libsqlite
SQLITE_CFLAGS = -I / app / INSTALL_FI LES / PHP-7.2.5 / ext / sqlite3 / libsqlite

Среда устанавливается следующим образом:

$ env|grep LD

LDFLAGS = -L / opt / csw / lib / gcc -L / usr / local / lib -R / opt / csw / lib / gcc

LD_LIBRARY_PATH_64 = / opt / csw / lib / sparcv9: / usr / local / 64 / lib: / usr / sfw / lib / sparcv9

LD_LIBRARY_PATH = / opt / csw / bin / sparcv9: / opt / csw / lib / sparcv9: / usr / local / include / php / ext / sqlite3 / libsqlite: / opt / csw / lib: / usr / local / 64 / lib : / usr / sfw / lib / sparcv9: /usr/apache2.2/pcre/lib: /usr/apache2.2/apr_util/lib: /usr/apache2.2/apr/lib

LD_LIBRARY_PATH_32 = / usr / local / include / php / ext / sqlite3 / libsqlite: / opt / csw / lib: /usr/apache2.2/pcre/lib: /usr/apache2.2/apr_util/lib: / usr / apache2 .2 / апр / библиотека

Любая помощь будет принята с благодарностью, заранее спасибо :)


person Monaco1967    schedule 11.02.2021    source источник
comment
Вы создаете 32- или 64-битную версию?   -  person Nigel Ren    schedule 11.02.2021
comment
Найдите минутку, чтобы прочитать справку по редактированию в справочном центре. Форматирование на Stack Overflow отличается от форматирования на других сайтах. Чем лучше выглядит ваш пост, тем легче другим его прочитать и понять.   -  person Dharman    schedule 11.02.2021


Ответы (1)


Вы создаете 64-разрядный исполняемый файл со следующим набором переменных среды:

LD LDFLAGS=-L/opt/csw/lib/gcc -L/usr/local/lib -R/opt/csw/lib/gcc

Учитывая эту ошибку:

ld: fatal: file /usr/local/lib/libiconv.so: wrong ELF class: ELFCLASS32

Общий объект /usr/local/lib/libiconv.so - это 32-битный общий объект.

Вы можете либо удалить каталоги, в которых есть 32-битные двоичные файлы, из переменных среды LD_* при создании или запуске 64-разрядных двоичных файлов, либо убедиться, что содержимое любого из этих каталогов является 32- или 64-разрядным, если имеется 64-разрядный файл. битовая библиотека в /usr/local/lib, которая вам нужна.

Вам необходимо прочитать ПЕРЕМЕННЫЕ ОКРУЖАЮЩЕЙ СРЕДЫ на ld.so.1 странице руководства по Solaris 10:

Переменные среды

Каждую переменную среды можно указать с суффиксом _32 или _64. Это делает переменную среды специфичной для 32-битных или 64-битных процессов соответственно. Эта переменная среды переопределяет любую действующую версию переменной среды без суффикса. Переменные среды, указанные без значения и имеющие суффикс _32 или _64, эффективно отменяют любую связанную настройку общей переменной среды.

Вы смешиваете множество LD_* переменных среды с суффиксами _32 и _64 и без них, и вам нужно очистить это и быть последовательным, чтобы не смешивать 32- и 64-битные исполняемые файлы.

И это выглядит совершенно неправильно:

ZLIB_LIBS=-L/usr/include

Библиотеки в _13 _ ???

person Andrew Henle    schedule 11.02.2021
comment
Привет, большое спасибо за ответы, это дает мне над чем поработать! - person Monaco1967; 15.02.2021