помилка: перевизначення ap_hack_apr_allocator_create

Складність компіляції Apache: Помилка перевизначення

Процес компіляції вихідного коду веб-сервера Apache може бути досить цікавим. Часто трапляється, що Apache не вдається зібрати з першої спроби на новому сервері.

Це пояснюється тим, що для успішної компіляції необхідна наявність певних компонентів та їхніх сумісних версій. Відсутність будь-якої з цих умов може призвести до витрати значного часу на їхнє усунення.

Я зіткнувся з подібною ситуацією, працюючи на свіжому сервері Linux 6.4, де намагався встановити Apache 2.4.6. Під час процесу компіляції з’явилася наступна помилка:

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

Якщо ви також стикнулися з цією помилкою, то наступні кроки допоможуть вам її вирішити.

Пошук розв’язання проблеми

Проаналізувавши різні аспекти проблеми, я виявив, що вона виникає за наявності версії apr-util, нижчої за 1.4.1.

  • Перевірте свою версію apr-util. Якщо версія нижча за 1.4.1, необхідно оновити її до версії 1.4.1 або новішої.
  • Завантажте вихідний код apr-util з http://mirror.nus.edu.sg/apache/apr/.
  • Розпакуйте завантажений архів.

Далі скомпілюйте та встановіть apr-util, виконавши наступні команди:

./configure
make
make install

За замовчуванням, apr-util буде встановлено в директорію /usr/local/apr/bin/apu-1-config.

Тепер ви можете знову спробувати скомпілювати Apache, вказавши шлях до щойно встановленої apr-util. Цього разу все має пройти без помилок.

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

Ці кроки допомогли мені вирішити проблему, і я сподіваюсь, що вони допоможуть і вам.

Чи була ця стаття для вас корисною? Якщо так, то, можливо, ви захочете поділитися нею з іншими!