read.cgi再開発スレ Part2

このエントリーをはてなブックマークに追加
591root▲ ★
ちと、ひとつ質問です。

ソースを見ると、

#if APR_HAS_THREADS
...
#endif

などとなっていますが、
これは read.cgi バイナリが APR_HAS_THREADS がある時とない時で、
違うものになる、ということなのかしら。
592動け動けウゴウゴ2ちゃんねる:2006/12/10(日) 19:24:03 ID:VIMYb3UP0
>>591
コンパイルする時にどちらを生成するかじゃないの?
593動け動けウゴウゴ2ちゃんねる:2006/12/10(日) 19:30:08 ID:VIMYb3UP0
ああ、ちょっと文章の解釈間違えてたかも
>>591
多分あなたが思ってる通りだと思います
ようはバイナリ生成時にAPR_HAS_THREADSが定義されてるかされてないかによって
#ifと#endifの間の行が評価されるかされないかが決まるってことですね
594動け動けウゴウゴ2ちゃんねる:2006/12/10(日) 21:13:32 ID:gIas9RbpP
当たり前じゃん
595 株価【1310】 ▲▲▲▲ ◆cZfSunOs.U :2006/12/10(日) 22:13:32 ID:uXE1Wu2M0
>>591 そういうことですね.worker MPM に入れるやつは,apr.h を見て

#define APR_HAS_THREAD 1

な鯖でビルドしてもらうということで(その #if...#endif を入れないと,
#define APR_HAS_THREAD 0 な環境でのビルドでエラーになってしまう).
596root▲ ★:2006/12/10(日) 22:26:19 ID:???0 BE:2280555-PLT(20123)
>>595
了解です。

APR_HAS_THREAD なサーバかどうかで、
バイナリ互換がなくなるという認識でいいのかしら。

ちなみに 2ch のApache 2.2 な掲示板サーバは APR_HAS_THREAD が 1 なので、
現在の作り方で、今のところは ok と。
597 株価【1310】 ▲▲▲▲ ◆cZfSunOs.U :2006/12/10(日) 22:35:40 ID:uXE1Wu2M0
>>596
>APR_HAS_THREAD なサーバかどうかで、
>バイナリ互換がなくなるという認識でいいのかしら。

基本的にはそうですね.もうちょっと詳しく述べると

・ !APR_HAS_THREAD な環境でビルドしたバイナリは,prefork MPM で使う限り
  !APR_HAS_THREAD, APR_HAS_THREAD どちらの環境でも使える(worker MPM では unsafe).

・ APR_HAS_THREAD な環境でビルドしたバイナリは,APR_HAS_THREAD な環境でのみ
 使える(prefork MPM でも Ok).!APR_HAS_THREAD な環境では dlopen() の
 時点でシンボルがないとかいうエラーになるはず.