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

apache не может загрузить mod_wsgi: жалуется на «отсутствующий символ»

Когда я бегу apachectl configtest после установки mod_wsgi я получаю следующее сообщение об ошибке:

httpd: Syntax error on line 117 of /private/etc/apache2/httpd.conf: Cannot load /usr/libexec/apache2/mod_wsgi.so into server: dlopen(/usr/libexec/apache2/mod_wsgi.so, 10): Symbol not found: _PyEval_ReleaseLock\n Referenced from: /usr/libexec/apache2/mod_wsgi.so\n Expected in: dynamic lookup\n

Я скомпилировал mod_wsgi 3.5 из исходников с помощью python 2.7.8. Apache - это версия 2.2.11. Обширный поиск в Google не выявил подобных проблем. Возможно, apache пытается использовать системную версию python, а не ту, которую я установил (также ту, которую я использовал для компиляции mod_wsgi).

Есть идеи, что вызывает эту ошибку и как ее исправить?

Если вы компилируете Apache и другие модули или приложения, от которых будет зависеть Apache, и они находятся в другом месте, чем общесистемная конфигурация LD, то ваш сценарий запуска, вероятно, должен указывать LD_LIBRARY_PATH.

Пример с одного из моих собственных серверов, на котором много скомпилированного кода:

LD_LIBRARY_PATH="/opt/apache/lib:/opt/zlib/lib:/opt/openssl/lib";export LD_LIBRARY_PATH

Вы также можете использовать «ldd» против любого из модулей, чтобы увидеть, на какие динамические библиотеки он ссылается. Если у вас отсутствовали различные флаги или параметры компилятора, включенные в нужные места, возможно, у вас неправильные заголовки и библиотеки. Это может привести к еще более запутанному поведению, потому что приложение может запускаться, но при определенных условиях может произойти сбой.