Løs Apache-kompileringsproblemer: Feilsøking av «redefinition» feil

Utfordringer ved Kompilering av Apache Webserver

Kompilering av Apache Web Server fra kildekoden kan ofte være en spennende, men også utfordrende prosess. Det er ikke uvanlig at kompileringen ikke går knirkefritt ved første forsøk, spesielt på en helt ny server. Dette skyldes at prosessen avhenger av en rekke forutsetninger, og manglende eller inkompatible versjoner av disse kan føre til feil og tidkrevende feilsøking.

Under arbeidet med å installere Apache 2.4.6 på en ny Linux 6.4 server, oppstod det en spesifikk feil som illustrerer denne problematikken:

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
	

Denne feilmeldingen indikerer et problem med redefinisjon av funksjoner knyttet til Apache Portable Runtime (APR). Dersom du opplever en lignende feil, er det viktig å undersøke og korrigere årsaken for å kunne fortsette med kompileringen.

Løsning på Re-Definisjonsfeil

Etter nærmere undersøkelse ble det klart at denne typen feil ofte oppstår når versjonen av apr-util er eldre enn 1.4.1. For å løse problemet, følg disse trinnene:

  1. Sjekk din versjon av apr-util: Bekreft hvilken versjon av apr-util som er installert på systemet. Hvis versjonen er lavere enn 1.4.1, må den oppgraderes.
  2. Last ned apr-util kildekode: Gå til http://mirror.nus.edu.sg/apache/apr/ for å laste ned den nyeste versjonen av kildekoden.
  3. Pakk ut nedlastet fil: Etter nedlasting, pakk ut innholdet i den komprimerte filen.

Med kildekoden klar, kan du nå kompilere og installere apr-util ved å bruke følgende kommandoer:

	./configure
	make
	make install
	

Som standard installeres apr-util under `/usr/local/apr/bin/apu-1-config`. Med den oppdaterte apr-util installert, skal kompileringen av Apache kunne fortsette uten problemer. Når du konfigurerer Apache, bruk følgende kommando for å peke til den nye apr-util-installasjonen:

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

Dette løste problemet for meg, og jeg håper det også hjelper deg.

Håper du fant denne artikkelen nyttig. Del gjerne informasjonen videre!