2.4.7 を最初からコンパイルして apache 2.2.3 を 2.4.7 にアップグレードしようとしたところ、次のエラーが発生しました。
[root@test httpd-2.4.7]# /etc/init.d/httpd start
Starting httpd: httpd: Syntax error on line 149 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_auth_basic.so into server: /etc/httpd/modules/mod_auth_basic.so: undefined symbol: ap_expr_str_exec
[FAILED]
しかし、ファイルはそこにあります、
/etc/httpd/modules/mod_auth_basic.so: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
2.2.3の元の設定は/etc/httpdにあり、コンパイルするために実行したコマンドは次のとおりです。
cd apr-1.5.0/
./configure --prefix=/usr/local/apr-httpd/
make
make install
cd ../apr-util-1.5.3/
./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/
make
make install
cd ../pcre-8.32/
./configure --prefix=/usr/local/pcre-8.32
make
make install
cd ../httpd-2.4.7/
./configure --with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/ --with-pcre=/usr/local/pcre-8.32/ --prefix=/etc/httpd
make
make install
何か案は ?
答え1
ap_expr_str_exec
はAPI関数であり、新しく導入されたApache httpd 2.4 コアで発生します。このエラーは、ランタイム リンカーが、mod_auth_basic.so モジュールがシンボルを解決する必要があるap_expr_str_exec
が、それが見つからなかったと報告していることが原因です。
これは、readelf コマンドの出力で確認できます。
$ readelf -s modules/mod_auth_basic.so
Num: Value Size Type Bind Vis Ndx Name
...
3: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND ap_expr_str_exec
...
シンボル インデックスの UND 値は未定義であることを意味し、実行時に解決する必要があります。
したがって、モジュールは 2.4 シンボルを参照していますが、実行中の実行可能ファイルにはそれがないため、httpd 2.4 モジュールを httpd 2.2 インスタンスにロードしようとしているように見えます。正しい httpd バイナリを実行していることを確認してください。