2010-11-19 9 views
0

私は、apacheがApacheのプロセス内で読み込まれたライブラリ(mod_wsgi)から参照されている特定のシンボルを見つけることができないという問題を抱えています。Apacheプロセスのap_cleanup_scoreboardおよびap_accept_lock_mechのシンボルが欠落しています。しかし、シンボルが存在する

私はApacheのプロセスを開始すると、私はこのエラーが表示されます。

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

ルート[zibal]% bin/apachectl restart httpd:/usr/local/apache2/conf/httpd.confの53行目の構文エラー:サーバに/usr/local/apache2/modules/mod_wsgi.soをロードできません:

rtld:0712- 001シンボルap_cleanup_scoreboardが/usr/local/apache2/modules/mod_wsgi.so()モジュールから参照されましたが、シンボルの実行時定義が見つかりませんでした。

にrtld:0712から001シンボルap_accept_lock_mechモジュール/usr/local/apache2/modules/mod_wsgi.so()から参照されたが、シンボルのランタイム定義が

が見つかりませんでした++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++

私は、Apacheの実行可能ファイルにnmコマンドの出力を貼り付けていますし、それらのシンボルが存在するように見えます。

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

ルート[zibal]%nm/| grepのap_accept_lock_mech

ap_accept_lock_mechのD 536880332

ap_accept_lock_mechさd 536900392 4

ap_accept_lock_mech:G879 - 0

ルート[zibal】%NM ./usr/local/apache2/bin/httpd |

.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 ap_cleanup_scoreboardはgrep:F385 - 2976 +++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++

ガイドしてください。

答えて

0

これが私がこの問題を解決する方法です(私は以下に示すように2つのソリューションを適用する必要がありました)。

ソリューション1(グラハムDumpletonのおかげで)

は、Apacheコードには何も変更しないでください。

mod_wsgiに移動します。Cソースコードと変化:

/* * Apacheは任意 *共有メモリセグメントまたはメモリは、デーモンプロセスのコードは使用できません *ファイルにマッピングすることを保証するために、スコアボードクリーンアップ。 */

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 

と探し:

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

し、それを変更します。mod_wsgiの

ソリューション2を構築次に

#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 

(ジェフTrawickに感謝Apacheから)

ファイルを探し、そのディレクトリにcd

.....ディレクトリにソースのtarボールを展開/ mpm_common.h

が含ま
Change 
     extern apr_lockmech_e ap_accept_lock_mech; 
to 
     AP_DECLARE_DATA extern apr_lockmech_e ap_accept_lock_mech; 

ファイルを検索します/ scoreboard.h

が含まれます
Change 
     apr_status_t ap_cleanup_scoreboard(void *d); 
to 
     AP_DECLARE(apr_status_t) ap_cleanup_scoreboard(void *d); 

そして、次のコマンドを発行し

./configure 
make 

このステップの後、現在のディレクトリに作成したサーバー ディレクトリとのhttpdファイルに

削除HTTPDを作成

編集サーバ/ httpd.exp httpd.expファイルがあるだろうとのために1行を追加します。 ap_accept_lock_mech

make 
    make install (as root) 

それから私はこれが同じ問題に直面して他の人に役立ちます願っていますソースのtarball

からのmod_wsgi 3.3を構築します。

関連する問題