Não é possível executar o programa de teste durante a compilação cruzada - compilação cruzada do Firebird

2

Eu tentei compilar o servidor firebird para o arm linux, com o compilador cruzado (ele é escolhido - ele está funcionando corretamente).

Ao usar:

./autogen.sh --host=arm-linux-gnu

Eu recebo este erro:

checking for working sem_init()... configure: error: in '/compile/code/firebird/trunk': configure: error: cannot run test program while cross compiling

Eu sei que estou fazendo uma compilação cruzada, mas talvez os desenvolvedores do Firebird descubram isso (mas eu li que o Firebird está pronto para compilação para outras arquiteturas).

    
por Sławomir Kozok 08.12.2015 / 12:49

1 resposta

3

O

Configure determina a resposta a certas perguntas compilando e executando programas on the fly ... o que pode (normalmente) fazer quando o host de compilação é o mesmo que o host de destino.

Quando você está compilando em cruz, (normalmente) sua máquina de compilação não pode executar os binários produzidos pelo compilador cruzado.

Para superar isso, localize onde o teste está no script de configuração e, se tiver sorte, o script de configuração permitirá o armazenamento em cache do resultado do teste ... você pode usá-lo para enganar o script de configuração. que já sabe a resposta para a pergunta e, portanto, não tentará compilar e executar o binário.

Por exemplo, se você estava tentando fazer a compilação cruzada do openldap 2.3.11 (uma versão antiga, eu sei), talvez seja necessário passar no ambiente a variável ac_cv_func_memcmp_working=yes (ou eu acho que você pode chamar o configure com este configuração na linha de comando, por exemplo, ./configure ac_cv_func_memcmp_working=yes --prefix=... ).

O código no script configure se parece com isso (é uma versão mais antiga do autoconf, então o código será diferente em scripts de configuração mais novos, mas o conceito não mudou) ...

echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6
if test "${ac_cv_func_memcmp_working+set}" = set; then
  echo $ECHO_N "(cached) $ECHO_C" >&6
else
  if test "$cross_compiling" = yes; then
    ac_cv_func_memcmp_working=no
  else
...

Você pode ver no código acima que o script de configuração faz uma suposição (incorreta, no meu caso) sobre a máquina de destino se achar que você está fazendo uma compilação cruzada.

Se você não pode contornar isso usando este truque (respostas em cache), você terá que fornecer uma solução alternativa de alguma outra forma ... o objetivo é enganar o script de configuração para que ele seja executado em todo o caminho.

    
por 08.12.2015 / 15:53