O que caiu Automake?

3

Ao fazer o download de software de código aberto da Internet (neste caso: PHP 5.5.5), eles geralmente vêm com um "script" do Automake (se posso chamá-lo de script) para criar a partir do código-fonte.

Agora estou tentando fazer uma compilação cruzada para uma arquitetura diferente, mas continuo recebendo um erro diferente sempre que especifico um ./configure --switch diferente. Normalmente, esse erro é uma mensagem curta não descritiva que significa absolutamente nada para ninguém, exceto o desenvolvedor.

checking "whether flock struct is linux ordered"... configure: error: in '/usr/src/hd/lib/php-5.5.5': configure: error: cannot run test program while cross compiling

Seguido por:

See 'config.log' for more details

Então eu digito:

cat ./config.log

Mas realmente, a única coisa fora do normal que está me mostrando é isso:

configure: exit 1

-

Então, o que dá? Como posso saber qual é o problema?

FYI, minhas opções de configuração parecem um pouco assim:

./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"

Como você pode não saber, estou usando o toolchain CodeSourcery para fazer a compilação cruzada para mips. Estou ciente de que não preciso especificar todas as variáveis (como RANLIB), mas não vejo como isso poderia prejudicar.

UPDATE

O problema parece estar em uma (ou mais) das extensões agrupadas, conforme listado aqui: link

Configurando com trabalhos --disable-all. Mas, obviamente, eu preciso de pelo menos algumas dessas extensões para fazer algum trabalho real.

Ainda assim, como posso saber qual deles?

UPDATE

Limitei o problema a uma extensão chamada OPcache que estava ativada por padrão (consulte: link ). Ele foi compilado com sucesso depois de desabilitar isso, junto com outras extensões que não funcionariam no meu sistema de destino de qualquer maneira.

Ainda assim, isso não era óbvio para mim. O que eu fiz foi trabalhar para trás do log de saída, desabilitando as extensões listadas uma a uma até que a coisa estúpida finalmente funcionasse.

Certamente, existe uma maneira melhor de identificar problemas como esses? Caso contrário, que diabos é o ponto inteiro deste absurdo automake?

    
por Steven Liekens 01.11.2013 / 11:43

1 resposta

1

O opscache requer libtdl , que faz parte do GNU Libtool .

Linux

No Linux, pegue o pacote libltdl-dev , por exemplo no Ubuntu:

$ sudo apt-get install libltdl-dev

Mac OSX

Para o OSX, a maneira mais fácil de instalar o GNU Libtool é instalá-lo através do Homebrew

$ brew install libtool

Especificamente, o GNU Libtool fornecerá os seguintes arquivos que são usados para compilação do PHP

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

Como uma nota lateral, o OSX vem com sua própria cópia do libtool que não inclui a interface libtdl. Para evitar conflitos, as ferramentas GNU Libtool são prefixadas com 'g', por ex. glibtool e glibtoolize

Libtdl

Para mais informações, consulte o link

    
por 02.05.2014 / 09:23