3

При загрузке программного обеспечения с открытым исходным кодом из Интернета (в данном случае: PHP 5.5.5) они часто поставляются с "сценарием" Automake (если я могу назвать его сценарием) для сборки из исходного кода.

Сейчас я пытаюсь выполнить кросс-компиляцию для другой архитектуры, но каждый раз, когда я указываю другой ./configure --switch, я получаю другую ошибку. Как правило, эта ошибка является коротким неописательным сообщением, которое абсолютно ничего не значит ни для кого, кроме разработчика.

проверка "является ли структура flock linux-упорядоченной" ... configure: error: в `/usr/src/hd/lib/php-5.5.5 ': configure: error: не удается запустить тестовую программу во время кросс-компиляции

С последующим:

Смотрите `config.log 'для более подробной информации

Итак, я набираю:

cat ./config.log

Но на самом деле, единственное необычное, что он мне показывает, это:

настроить: выход 1

-

Так что же дает? Как я могу сказать, в чем проблема?

К вашему сведению, мои параметры конфигурации выглядят примерно так:

./configure --prefix="`pwd`/install/" \
--build="i386-pc-linux-gnu" \
--host="mips-linux-gnu" \
--target="mips-linux-gnu" \
--with-libxml-dir="/usr/src/hd/lib/libxml2-2.7.8/install/" \
--enable-soap \
CC="mips-linux-gnu-gcc" \
CFLAGS="-O2 -EL -march=74kf" \
CPP="mips-linux-gnu-cpp" \
CPPFLAGS="-I$CROSS_ROOTFS/include" \
CXX="mips-linux-gnu-g++" \
CXXFLAGS="-O2 -EL -march=74kf" \
CXXCPP="mips-linux-gnu-cpp" \
AR="mips-linux-gnu-ar" \
RANLIB="mips-linux-gnu-ranlib" \
AS="mips-linux-gnu-as" \
NM="mips-linux-gnu-nm" \
LD="mips-linux-gnu-ld" \
LDFLAGS="-L$CROSS_ROOTFS/lib" \
ADDR2LINE="mips-linux-gnu-addr2line"

Как вы, возможно, не знаете, я использую набор инструментов CodeSourcery для кросс-компиляции mips. Я знаю, что мне не нужно указывать все переменные (например, RANLIB), но я не понимаю, как это может повредить.

ОБНОВИТЬ

Похоже, проблема заключается в одном (или нескольких) связанных расширениях, как указано здесь: http://php.net/manual/en/extensions.membership.php

Конфигурирование с помощью --disable-all работает. Но, очевидно, мне нужны хотя бы некоторые из этих расширений, чтобы сделать какую-то реальную работу.

Тем не менее, как я могу сказать, какой?

ОБНОВИТЬ

Я сузил проблему до расширения под названием OPcache, которое было включено по умолчанию (см .: http://us2.php.net/manual/en/opcache.installation.php). Он успешно скомпилирован после отключения этого, наряду с некоторыми другими расширениями, которые в любом случае не будут работать на моей целевой системе.

Тем не менее, это было совсем не очевидно для меня. То, что я сделал, это работал в обратном направлении от выходного журнала, отключая перечисленные расширения одно за другим, пока глупость не сработает.

Конечно, должен существовать лучший способ точно определить проблемы, подобные этим? Иначе, что, черт возьми, весь смысл этой бессмыслицы?

1 ответ1

1

Для opscache требуется libtdl , который является частью GNU Libtool.

Linux

В Linux получите пакет libltdl-dev , например, в Ubuntu:

$ sudo apt-get install libltdl-dev

Mac OS X

Для OSX самый простой способ установить GNU Libtool - это установить его через Homebrew

$ brew install libtool

В частности, GNU Libtool предоставит следующие файлы, которые используются для компиляции PHP

/usr/local/lib/libltdl.dylib
/usr/local/lib/libltdl.a
/usr/local/lib/libltdl.7.dylib

Как примечание, OSX поставляется с собственной копией libtool, которая не включает интерфейс libtdl. Чтобы избежать конфликтов, инструменты GNU Libtool имеют префикс «g», например, glibtool и glibtoolize

Libtdl

Для получения дополнительной информации, пожалуйста, обратитесь к http://www.gnu.org/software/libtool/manual/html_node/Libltdl-interface.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .