Перейти к содержимому

Что разбил Automake?

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 ). Он успешно скомпилирован после отключения этого, наряду с некоторыми другими расширениями, которые в любом случае не будут работать на моей целевой системе.

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

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

894 просмотра
Steven Liekens спросил 12 лет назад
S 263

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

Благодарю. В настоящее время я все еще использую PHP без OPcache, но я посмотрю на это. Я должен спросить, где вы находите такую ​​информацию? Я не помню, чтобы когда-нибудь упоминали libdtl.

Steven Liekens · 12 лет назад · 0

@StevenLiekens Мне повезло - я искал с сообщением об ошибке, в частности, вокруг struct flock, и наткнулся на решение vasilis на https://bugs.php.net/bug.php?id=65423. Я надеюсь, что разработчики PHP либо добавят libtool в качестве dep, когда opcache включен, либо выдадут более полезное сообщение об ошибке autoconf / make. Я также представил аналогичный патч для https://github.com/Homebrew/homebrew-php/ PHP> 5.5 и надеюсь, что он будет принят

hanxue · 12 лет назад · 0
hanxue ответил 12 лет назад
H 1 700