Erro Apache: Solução definitiva para “redefinição de ‘ap_hack_apr_allocator_create'”

Foto do autor

By luis

A tarefa de compilar o código-fonte do servidor web Apache frequentemente apresenta desafios.

Não é comum que o processo de compilação do Apache seja bem-sucedido na primeira tentativa em um novo servidor.

Isso se deve ao fato de que ele exige várias dependências, e a ausência ou incompatibilidade de alguma delas pode levar a um tempo considerável gasto na resolução de problemas.

Durante a instalação do Apache 2.4.6 em um novo servidor Linux 6.4, deparei-me com o seguinte erro:

exports.c:1929:
error: redefinição de 'ap_hack_apr_allocator_create'
exports.c:921: note: definição anterior de 'ap_hack_apr_allocator_create' estava aqui exports.c:1930:
error: redefinição de 'ap_hack_apr_allocator_destroy'
exports.c:922: note: definição anterior de 'ap_hack_apr_allocator_destroy' estava aqui exports.c:1931:
error: redefinição de 'ap_hack_apr_allocator_alloc' exports.c:923: note: definição anterior de 'ap_hack_apr_allocator_alloc' estava aqui exports.c:1932:
error: redefinição de 'ap_hack_apr_allocator_free' exports.c:924: note: definição anterior de 'ap_hack_apr_allocator_free' estava aqui exports.c:1933:
error: redefinição de 'ap_hack_apr_allocator_owner_set'
exports.c:925: note: definição anterior de 'ap_hack_apr_allocator_owner_set' estava aqui exports.c:1934:
error: redefinição de 'ap_hack_apr_allocator_owner_get' exports.c:926: note: definição anterior de 'ap_hack_apr_allocator_owner_get' estava aqui exports.c:1935:
error: redefinição de 'ap_hack_apr_allocator_max_free_set' exports.c:927: note: definição anterior de 'ap_hack_apr_allocator_max_free_set' estava aqui exports.c:1937:
error: redefinição de 'ap_hack_apr_allocator_mutex_set' exports.c:929: note: definição anterior de 'ap_hack_apr_allocator_mutex_set' estava aqui exports.c:1938:
error: redefinição de 'ap_hack_apr_allocator_mutex_get' exports.c:930: note: definição anterior de 'ap_hack_apr_allocator_mutex_get' estava aqui exports.c:1944:
error: redefinição de 'ap_hack_apr_atomic_init' exports.c:936: note: definição anterior de 'ap_hack_apr_atomic_init' estava aqui exports.c:1945:
error: redefinição de 'ap_hack_apr_atomic_read32' exports.c:937: note: definição anterior de 'ap_hack_apr_atomic_read32' estava aqui exports.c:1946:
error: redefinição de 'ap_hack_apr_atomic_set32' exports.c:938: note: definição anterior de 'ap_hack_apr_atomic_set32' estava aqui exports.c:1947:
error: redefinição de 'ap_hack_apr_atomic_add32' exports.c:939: note: definição anterior de 'ap_hack_apr_atomic_add32' estava aqui exports.c:1948:
error: redefinição de 'ap_hack_apr_atomic_sub32' exports.c:940: note: definição anterior de 'ap_hack_apr_atomic_sub32' estava aqui exports.c:1949:
error: redefinição de 'ap_hack_apr_atomic_inc32' exports.c:941: note: definição anterior de 'ap_hack_apr_atomic_inc32' estava aqui exports.c:1950:
error: redefinição de 'ap_hack_apr_atomic_dec32' exports.c:942: note: definição anterior de 'ap_hack_apr_atomic_dec32' estava aqui exports.c:1951:
error: redefinição de 'ap_hack_apr_atomic_cas32' exports.c:943: note: definição anterior de 'ap_hack_apr_atomic_cas32' estava aqui exports.c:1952:
error: redefinição de 'ap_hack_apr_atomic_xchg32' exports.c:944: note: definição anterior de 'ap_hack_apr_atomic_xchg32' estava aqui exports.c:1953:
error: redefinição de 'ap_hack_apr_atomic_casptr' exports.c:945: note: definição anterior de 'ap_hack_apr_atomic_casptr' estava aqui exports.c:1954:
error: redefinição de 'ap_hack_apr_atomic_xchgptr' exports.c:946: note: definição anterior de 'ap_hack_apr_atomic_xchgptr' estava aqui exports.c:1960:
error: redefinição de 'ap_hack_apr_dso_load' exports.c:1085: note: definição anterior de 'ap_hack_apr_dso_load' estava aqui exports.c:1961:
error: redefinição de 'ap_hack_apr_dso_unload' exports.c:1086: note: definição anterior de 'ap_hack_apr_dso_unload' estava aqui exports.c:1962:
error: redefinição de 'ap_hack_apr_dso_sym' exports.c:1087: note: definição anterior de 'ap_hack_apr_dso_sym' estava aqui exports.c:1963:
error: redefinição de 'ap_hack_apr_dso_error' exports.c:1088: note: definição anterior de 'ap_hack_apr_dso_error' estava aqui exports.c:1969:
error: redefinição de 'ap_hack_apr_env_get' exports.c:1094: note: definição anterior de 'ap_hack_apr_env_get' estava aqui exports.c:1970:
error: redefinição de 'ap_hack_apr_env_set' exports.c:1095: note: definição anterior de 'ap_hack_apr_env_set' estava aqui exports.c:1971:
error: redefinição de 'ap_hack_apr_env_delete' exports.c:1096: note: definição anterior de 'ap_hack_apr_env_delete' estava aqui exports.c:1976:
error: redefinição de 'ap_hack_apr_strerror' exports.c:1101: note: definição anterior de 'ap_hack_apr_strerror' estava aqui export.c:1981:
error: redefinição de 'ap_hack_apr_stat' exports.c:1106: note: definição anterior de 'ap_hack_apr_stat' estava aqui exports.c:1982:
error: redefinição de 'ap_hack_apr_dir_open' exports.c:1107: note: definição anterior de 'ap_hack_apr_dir_open' estava aqui exports.c:1983:
error: redefinição de 'ap_hack_apr_dir_close' exports.c:1108: note: definição anterior de 'ap_hack_apr_dir_close' estava aqui

Se você está enfrentando um erro semelhante, a solução que apresento pode ser útil.

Solução

Após analisar diversos parâmetros, constatei que esse problema surge quando a versão do apr-util é anterior a 1.4.1.

  • Verifique a versão do seu apr-util. Se for inferior a 1.4.1, você precisará instalar a versão 1.4.1 ou superior.
  • Baixe o código-fonte do apr-util em: http://mirror.nus.edu.sg/apache/apr/
  • Extraia o arquivo que você acabou de baixar.

Para compilar e instalar, siga os seguintes passos:

./configure
make
make install

Por padrão, ele será instalado em /usr/local/apr/bin/apu-1-config.

Agora, você poderá compilar o Apache utilizando o apr-util recém-instalado, e o processo deverá ocorrer sem problemas.

./configure --with-apr-util=/usr/local/apr/bin/apu-1-config

Essa solução funcionou para mim, e espero que funcione para você também!

Gostou do artigo? Compartilhe com seus colegas!