У меня проблема, из-за которой apache не может найти определенные символы, на которые есть ссылки из библиотеки (mod_wsgi), загруженной в процессе apache.
Когда я запускаю процесс apache, я получаю эту ошибку.
root [zibal]% ./usr/local/apache2/bin/apachectl restart
httpd: Syntax error on line 53 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/mod_wsgi.so into server:
rtld:0712-001 Symbol ap_cleanup_scoreboard was referenced from module /usr/local/apache2/modules/mod_wsgi.so(), but a runtime definition of the symbol was not found.
rtld: 0712-001 Symbol ap_accept_lock_mech was referenced from module /usr/local/apache2/modules/mod_wsgi.so(), but a runtime definition of the symbol was not found
Я вставляю вывод команды nm в исполняемый файл apache, и эти символы, похоже, существуют.
root [zibal]% nm ./usr/local/apache2/bin/httpd | grep ap_accept_lock_mech
ap_accept_lock_mech D 536880332
ap_accept_lock_mech d 536900392 4
ap_accept_lock_mech:G879 - 0
root [zibal]% nm ./usr/local/apache2/bin/httpd | grep ap_cleanup_scoreboard
.ap_cleanup_scoreboard T 268613428 212
ap_cleanup_scoreboard D 536890068
ap_cleanup_scoreboard d 536890068 12
ap_cleanup_scoreboard d 536899972 4
ap_cleanup_scoreboard:F385 - 2976
Пожалуйста, направьте.
Распакуйте исходный tar-файл в каталог ... cd в этот каталог
Найдите файл include / mpm_common.h
Измените внешний apr_lockmech_e ap_accept_lock_mech; к AP_DECLARE_DATA extern apr_lockmech_e ap_accept_lock_mech;
Найдите файл include / scoreboard.h
Изменить apr_status_t ap_cleanup_scoreboard (void * d); в AP_DECLARE (apr_status_t) ap_cleanup_scoreboard (void * d);
А затем выполните следующие команды ./configure make
После этого шага в каталоге сервера будет создан файл httpd.exp, а в текущем каталоге - файл httpd.
удалить httpd
отредактируйте server / httpd.exp и добавьте одну строку для ap_accept_lock_mech
сделать make install (как root)
Затем соберите mod_wsgi 3.3 из Source Tarball
Ничего не меняйте в коде Apache.
Зайдите в исходный код mod_wsgi.c и измените:
/*
* Cleanup the Apache scoreboard to ensure that any
* shared memory segments or memory mapped files not
* available to code in daemon processes.
*/
ap_cleanup_scoreboard(0);
к
/*
* Cleanup the Apache scoreboard to ensure that any
* shared memory segments or memory mapped files not
* available to code in daemon processes.
*/
ap_cleanup_scoreboard(0);
а затем ищите:
sconfig-> lock_mechanism = ap_accept_lock_mech;
sconfig-> lock_mechanism = APR_LOCK_DEFAULT;
и измените его на:
sconfig-> lock_mechanism = ap_accept_lock_mech;
sconfig-> lock_mechanism = APR_LOCK_DEFAULT;
Затем соберите mod_wsgi