После попытки обновить 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.