/etc/httpd/modules/mod_auth_basic.so をロードできません

/etc/httpd/modules/mod_auth_basic.so をロードできません

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 バイナリを実行していることを確認してください。

関連情報