chyba: předefinování ap_hack_apr_allocator_create

Kompilace zdrojového kódu webového serveru Apache může být občas docela výzvou.

Není příliš obvyklé, že by se Apache podařilo zkompilovat hned napoprvé na zbrusu novém serveru.

Často je potřeba splnit mnoho požadavků, a pokud některý chybí nebo dochází ke konfliktům verzí, můžete strávit spoustu času jejich řešením.

Během instalace Apache 2.4.6 na nový server s Linuxem 6.4 jsem narazil na následující chyby:

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

Pokud narazíte na podobné chyby, zde je postup, který mi pomohl je vyřešit.

Řešení problému

Po bližším zkoumání různých parametrů jsem zjistil, že tyto chyby se objevují, když je nainstalována verze apr-util nižší než 1.4.1.

  • Zkontrolujte aktuální verzi apr-util. Pokud je nižší než 1.4.1, je potřeba nainstalovat verzi 1.4.1 nebo vyšší.
  • Stáhněte zdrojový kód apr-util z http://mirror.nus.edu.sg/apache/apr/.
  • Rozbalte stažený archiv.

Proveďte kompilaci a instalaci pomocí následujících příkazů:

./configure
make
make install
  

Standardně se instalace umístí do `/usr/local/apr/bin/apu-1-config`.

Nyní můžete Apache zkompilovat s nově nainstalovanou verzí apr-util a vše by mělo proběhnout bez problémů.

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

Mně tento postup pomohl, doufám, že pomůže i vám.

Líbil se vám tento článek? Budeme rádi, pokud se o něj podělíte.