Solaris 10, ao tentar executar o apache: ld.so.1: httpd: erro de relocação fatal

1

Estou tentando replicar uma caixa de produção em meu laboratório, instalei o apache e estou tentando usar a configuração copiada do ambiente de produção; os resultados são a seguinte mensagem de erro:

[root@hnm]/usr/local/apache2/bin$./apachectl -k start -f /usr/local/apache2/conf/hdm /httpd.conf httpd: Syntax error on line 939 of /usr/local/apache2/conf/hdm/httpd.conf: Syntax error on line 29 of /usr/local/apache2/conf/hdm/modules.conf: Cannot load /usr/local/apache2/modules /mod_cwmp_22.so into server: ld.so.1: httpd: fatal: relocation error: file /usr/local/apache2 /modules/mod_cwmp_22.so: symbol curl_easy_init: referenced symbol not found

    
por javier 23.04.2013 / 17:18

1 resposta

2

Vamos detalhar sua mensagem de erro:

Cannot load /usr/local/apache2/modules /mod_cwmp_22.so into server:

Bem, óbvio.

ld.so.1: httpd: fatal: relocation error:

ld.so.1 é o carregador dinâmico de tempo de execução. Quando você inicia um aplicativo que está dinamicamente vinculado (e no Solaris EVER tudo está dinamicamente vinculado), o carregador dinâmico precisa trazer todas as bibliotecas. Ele também precisa garantir não só que ele tenha todos os arquivos, mas que vincule todas as referências, tanto o código quanto os dados.

file /usr/local/apache2 /modules/mod_cwmp_22.so: symbol curl_easy_init: referenced symbol not found

Agora, aqui vamos nós. O carregador dinâmico trouxe o módulo cwmp, que depende do curl (libcurl). Parece ter encontrado libcurl.so (ou então você teria visto um erro diferente) mas não pode encontrar o símbolo específico. Ou seja: ele sabe que o módulo cwmp precisa da chamada de função curl_easy_init, mas não consegue encontrá-lo.

Meu palpite é que você tem uma incompatibilidade de versão libcurl. O módulo do servidor web foi construído contra uma versão do libcurl, mas agora você está tentando rodar contra uma versão diferente em sua caixa dev.

Verificação de ID para versões do libcurl. talvez faça um strings -a no libcurl no dev e no prod, certifique-se de que eles combinem. Existem outras ferramentas como readelf que você pode usar para verificar isso, mas meu palpite é que você pode copiar o libcurl do prod e colocá-lo em algum lugar no dev onde você possa vê-lo.

    
por 23.04.2013 / 17:34