Назад | Перейти на главную страницу

В AIX отсутствуют символы ap_cleanup_scoreboard и ap_accept_lock_mech для процесса Apache. Однако символы все же существуют

У меня проблема, из-за которой 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

Пожалуйста, направьте.

Решение 1 (спасибо Джеффу Трэуику из Apache)

Распакуйте исходный 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

Решение 2 (спасибо Грэму Дамплтону)

Ничего не меняйте в коде 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);

к

если 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);

endif

а затем ищите:

если! определено (AP_ACCEPT_MUTEX_TYPE)

sconfig-> lock_mechanism = ap_accept_lock_mech;

еще

sconfig-> lock_mechanism = APR_LOCK_DEFAULT;

endif

и измените его на:

определить AP_ACCEPT_MUTEX_TYPE 1

если! определено (AP_ACCEPT_MUTEX_TYPE)

sconfig-> lock_mechanism = ap_accept_lock_mech;

еще

sconfig-> lock_mechanism = APR_LOCK_DEFAULT;

endif

Затем соберите mod_wsgi