Невозможно загрузить /etc/httpd/modules/mod_auth_basic.so

Невозможно загрузить /etc/httpd/modules/mod_auth_basic.so

После попытки обновить apache 2.2.3 до 2.4.7 путем компиляции 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.

Связанный контент