[PHP-users 7351] Re: apache1.3.23+php-4.1.2+pgsql7.1.3 でのapache起動NG

大柳 勝 php-users@php.gr.jp
Thu, 09 May 2002 19:14:02 +0900


大柳です。

みなさまありがとうございました。
成功しましたので、動作環境、問題事象、解決策を以下にまとめます。

■動作環境
  OS:solaris2.6
  APACHE 1.3.23
  PHP 4.1.2
  PostgreSQL 7.1.3

■問題事象
  apache起動時に以下のエラーが発生します。

  # apachectl start
  Syntax error on line 206 of /usr/local/apache/conf/httpd.conf:
  Cannot load /usr/local/apache/libexec/libphp4.so into server: ld.so.1:
  /usr/local/apache/b
  in/httpd: 重大なエラー: 再配置エラー: ファイル 
  /usr/local/apache/libexec/libphp4.so: シンボル ap_block_alarms: 参照されたシンボルがありません
  apachectl start: httpd could not be started

■原因(各種MLよりの抜粋ですので保証はできません)

  Apacheで使うダイナミックロードオブジェクトは、Apache本体
  にあるコードを呼び出します。
  ダイナミックロードオブジェクトから本体のコードを呼び出すためには、
  本体の実行形式ファイル内のシンボルが公表されている必要があります。

  しかしながら、GNUのldでリンクした場合は、デフォルトでは公表されません。
  #公表とはdlopen(),dlsym()等で参照できるかどうかです。

■解決策

  apacheコンパイル(make)前にapache_1.3.23/src/Makefileを
  以下のように書き換えます。

  EXTRA_LDFLAGS= → EXTRA_LDFLAGS=-export-dynamic
  LD_SHLIB=ld  → LD_SHLIB=gcc

  これにより、httpdオブジェクト生成時、以下のようにリンケージされます。

  gcc -O2 -DSOLARIS2=260 -DUSE_EXPAT -I./lib/expat-lite `./apaci`-export-dynamic  \
      -o httpd buildmark.o modules.o  modules/standard/libstandard.a  main/libmain.a 
      ./os/unix/libos.a  ap/libap.a  lib/expat-lite/libexpat.a  -lsocket -lnsl

  なお、PHP,PostgreSQLのインストール方法は今まで通りで大丈夫でした。

                                                      以上です。