コンパイル|問題
この章では、コンパイル中に発生する可能性のある多くのエラー状態をまとめます。 1. 匿名 CVS を使用してソース コード パッケージの最新バージョンを取得しましたが、構成スクリプト ファイルがありませんでした。 2. Apache で動作するように PHP を構成するときに問題が発生しました。 httpd.h が見つからないと表示されましたが、実際には存在していました。 3. conifgure を実行すると、インクルード ファイルまたはライブラリ (GD、gdbm、またはその他のパッケージ) が見つからないと表示されました。ファイル language-parser.tab.c をコンパイル中に、エラーが発生しました。プロンプト: yytname undeclared. 5. make を実行すると、最初は正常に動作しましたが、最終的にはエラーが発生しました。一部のファイルが見つからないというメッセージが表示されました。 6. PHP に接続すると、未定義の参照を示すエラーが大量に発生しました。 7. Apache 1.3 で PHP をコンパイルする方法がわかりません。 8. 手順に従って Apache モジュール (Unix 上) をインストールしましたが、ブラウザで PHP スクリプトを開いたときに、保存するかどうかを尋ねられました。 9. システムは --activate-module=src/modules/php4/libphp4.a を使用するように指示しましたが、ファイルがまったく存在しなかったため、 --activate-module=src/modules/ に変更する必要がありました。 php4/libmodphp4.a は機能しません。どうすればよいですか? 10. PHP を Apache の静的モジュールにコンパイルしたいのですが、 --activate-module=src/modules/php4/libphp4.a を使用します。システムは、私のコンパイラは ANSI 互換ではないと言います。 11. --with-apxs を使用して PHP をコンパイルすると、常に奇妙なエラーが発生します。 12. make を実行すると、microtime に関する多くのエラーと、多くの RUSAGE_ に関するエラーが発生します。 13. PHP をアップグレードしたいのですが、現在実行している PHP の元の設定 (以前に使用していたもの) はどこで確認できますか。インストール? ./configure 行の内容? 14. GD ライブラリで PHP をコンパイルすると、実行中に奇妙なエラーが発生するか、
の最新バージョンを取得するために使用します。ソース コード パッケージですが、configure スクリプト ファイルはありません
configure.in から構成スクリプト ファイルを生成できるように、GNU autoconf パッケージをインストールする必要があります。トップレベルで ./buildconf を実行するだけです。 CVS サーバーのディレクトリに移動してソース コードを取得します。 (注: --enable-maintainer-mode オプションを指定してconfigureを実行しない限り、configure.inファイルが更新されてもconfigureスクリプトは再生成されないため、configure.inが変更されたことがわかった時点で、 config または config.status を実行すると、Makefile に @VARIABLE@ のようなラベルが表示されます。
2. Apache で動作するように PHP を設定するときに問題が発生しました。 httpd.h が見つからないと表示されますが、そこにあるようです
configure/setup スクリプトに Apache の最上位ディレクトリの場所を伝える必要があります。 つまり、 --with-apache=/path/to/apache/src の代わりに --with-apache=/path/to/apache をマークする必要があります 3。 conifgure、インクルード ファイルまたはいくつかのライブラリ (GD、gdbm、またはその他のパッケージ) が見つからないと表示されます。
これらのヘッダー ファイルまたは非標準ライブラリの場所を確認するには、configure スクリプトを参照してください。いくつかの特別なフラグを C プリインストーラーに送信する必要があります。例: CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
4 ファイル language-parser.tab.c をコンパイルすると、エラーが発生し、次のプロンプトが表示されました: yytname undeclared。
Bison バージョンを更新する必要があります。最新バージョンは ftp://ftp.gnu.org/pub/gnu/bison/ で見つけることができます。make を実行すると、最初はうまくいきましたが、最後のアプリケーションに接続すると、いくつかのファイルが見つからないというエラーが発生しました。
一部の古いバージョンの make では、functions ディレクトリにあるコンパイル済みファイルを同じディレクトリに置くことができません。cp *.o function
を実行してから、make を実行して、改善されるかどうかを確認してください。 その場合は、GNU Make のバージョンを更新する必要があります。 6.
PHP に接続すると、未定義の参照というエラーが大量に表示されます。 ファイル内の接続行を見て、関連するパッケージがすべて正しく含まれていることを確認します。通常、これは「-ldl」が欠落しており、サポートする必要があるデータベース パッケージがいくつかあることが原因です。 Apache 1.2.x に接続している場合は、EXTRA_LIBS 行に追加情報を追加し、Apache の Configure スクリプトを再実行することを忘れましたか? 配布パッケージの INSTALL ファイルを参照してください。 「-ldl」を追加するとすぐに libphp4.a が得られたと多くの人が言いました。
7. Apache 1.3 で PHP をコンパイルする方法がわかりません。
実際、これは非常に簡単で、以下の手順に従ってください:
次の場所 http://www.apache.org/dist/ から Apache 1.3 ソース コードを取得します ファイルを解凍します。 /usr/local/src/apache-1.3 などの特定のディレクトリ
PHP ディストリビューション パッケージ ディレクトリで PHP をコンパイルします ./configure --with-apache=/
my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmplmy $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmplmy $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmplmy $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmplmy $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
microtime.c: In function `php_if_getrusage':microtime.c:94: storage size of `usg' isn't knownmicrotime.c:97: `RUSAGE_SELF' undeclared (first use in this function)microtime.c:97: (Each undeclared identifier is reported only oncemicrotime.c:97: for each function it appears in.)microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)make[3]: *** [microtime.lo] Error 1make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'make[2]: *** [all-recursive] Error 1make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'make[1]: *** [all-recursive] Error 1make[1]: Leaving directory `/home/master/php-4.0.1/ext'make: *** [all-recursive] Error 1
$ cat >test.c <<X#include <sys/resource.h>X$ gcc -E test.c >/dev/null
<?php phpinfo(); ?>