2010-11-19 22 views
0

J'ai un problème avec apache qui n'arrive pas à trouver certains symboles référencés à partir d'une bibliothèque (mod_wsgi) chargée dans le processus apache. Lorsque je lance le processus Apache, j'obtiens cette erreur.AIX Symboles manquants ap_cleanup_scoreboard et ap_accept_lock_mech pour Apache Process. Cependant, les symboles existent

++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++

racine [zibal]% ./usr/local/apache2/ bin/apachectl restart httpd: Erreur de syntaxe sur la ligne 53 de /usr/local/apache2/conf/httpd.conf: Impossible de charger /usr/local/apache2/modules/mod_wsgi.so dans le serveur:

rtld: 0712- 001 Le symbole ap_cleanup_scoreboard a été référencé à partir du module /usr/local/apache2/modules/mod_wsgi.so(), mais une définition d'exécution du symbole n'a pas été trouvée.

rtld: 0712-001 Symbole ap_accept_lock_mech a été référencé à partir du module /usr/local/apache2/modules/mod_wsgi.so(), mais une définition d'exécution du symbole n'a pas été trouvé

++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++

Je colle la sortie de la commande nm sur l'exécutable apache et ces symboles semblent exister.

++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++

racine [zibal]% nm ./usr/local/apache2/bin/httpd | grep ap_accept_lock_mech

536880332 D ap_accept_lock_mech

536900392 ap_accept_lock_mech d 4

ap_accept_lock_mech: G879 - 0

racine [zibal]% ./usr/local/apache2/bin/httpd nm | grep ap_cleanup_scoreboard

268613428 .ap_cleanup_scoreboard T 212

536890068 D ap_cleanup_scoreboard

536890068 ap_cleanup_scoreboard d 12

536899972 ap_cleanup_scoreboard d 4

ap_cleanup_scoreboard: F385 - 2976 +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++

S'il vous plaît guider.

Répondre

0

Et voici comment j'ai pu résoudre ce problème (j'ai dû appliquer deux solutions comme indiqué ci-dessous).

Solution 1 (Merci à Graham Dumpleton)

Ne pas changer quoi que ce soit dans le code Apache.

Passez dans mod_wsgi.c code source et le changement:

/* * Nettoyage du tableau de bord pour Apache assurer que toutes les * segments de mémoire partagée ou mémoire mis en correspondance des fichiers non * disponibles au code dans les processus de démon. */

ap_cleanup_scoreboard (0);

à

#if 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 

puis chercher:

#if !defined(AP_ACCEPT_MUTEX_TYPE) 
    sconfig->lock_mechanism = ap_accept_lock_mech; 
#else 
    sconfig->lock_mechanism = APR_LOCK_DEFAULT; 
#endif 

et changer à:

#define AP_ACCEPT_MUTEX_TYPE 1 
#if !defined(AP_ACCEPT_MUTEX_TYPE) 
    sconfig->lock_mechanism = ap_accept_lock_mech; 
#else 
    sconfig->lock_mechanism = APR_LOCK_DEFAULT; 
#endif 

ensuite construire mod_wsgi

Solution 2 (Merci à Jeff Trawick d'Apache)

Extrait la balle de goudron Source dans un répertoire ..... cd dans ce répertoire

Localisez le fichier include/mpm_common.h

Change 
     extern apr_lockmech_e ap_accept_lock_mech; 
to 
     AP_DECLARE_DATA extern apr_lockmech_e ap_accept_lock_mech; 

Localisez le fichier include/scoreboard.h

Change 
     apr_status_t ap_cleanup_scoreboard(void *d); 
to 
     AP_DECLARE(apr_status_t) ap_cleanup_scoreboard(void *d); 

Et puis exécutez les commandes suivantes

./configure 
make 

Après cette étape, il y aura un fichier httpd.exp créer dans le serveur d'annuaire et un fichier httpd créé dans le répertoire actuel

supprimer httpd

serveur modifier/httpd.exp et ajouter une ligne pour ap_accept_lock_mech

make 
    make install (as root) 

Ensuite, construire mod_wsgi 3.3 de la source Tarball

J'espère que cela aide les autres face au même problème.