
Apache Web サーバーのソース コードのコンパイルは常に楽しいものです。
真新しいサーバーでの最初の実行時に 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 以降をインストールする必要があります。
- apr-util のソース コードを からダウンロードします。 http://mirror.nus.edu.sg/apache/apr/
- ダウンロードしたファイルを解凍する
次のようにコンパイルしてインストールします
./configure make make install
デフォルトでは、/usr/local/apr/bin/apu-1-config にインストールされます。
これで、新しくインストールした apr-util を使用して apache をコンパイルできます。これで問題ありません。
./configure --with-apr-util=/usr/local/apr/bin/apu-1-config
それは私を助けました、そして私もあなたを願っています。
記事を読んでよかったですか? 世界と共有してみませんか?