ホームページ > php教程 > php手册 > コンパイルの問題

コンパイルの問題

WBOY
リリース: 2016-06-21 09:10:46
オリジナル
1163 人が閲覧しました

コンパイル|問題

この章では、コンパイル中に発生する可能性のある多くのエラー状態をまとめます。 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
ログイン後にコピー
シェルが csh-variant を使用している場合、次のようになります (なぜですか?):
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=//apache-1.3 (ユーザーの実際のapache-1.3 ディレクトリの場所は、 を置き換えます。

    と入力します:
  • make
    次に、:
  • make install
    PHP をコンパイルし、必要なファイルを Apache ディレクトリにコピーします

  • //apache に変更します。 1.3/src ディレクトリで、次の行をファイルに追加します: AddModule modules/php4/libphp4.a. Type:
  • ./Configure
    これで httpd ファイルが完成しました。 注意:你也可以使用新的Apache ./configure 脚本. 见发行包里的 README.configure 当然也要看看PHP发行包里的 INSTALL 文件。
    8. 我按照步骤一步一步安装了Apache模块(Unix下), 可是在浏览器里打开 PHP 脚本时它却问我是否要保存。

    这意味着你的PHP模块没有被加载。你可从下面三点来检查:

    • 确认你运行的Httpd是你刚刚编译了PHP的Httpd. 可以运行: /path/to/binary/httpd -l
      如果你没有看到 mod_php4.c 列出来,那么你运行了不正确的Httpd. 最好重新安装它。

    • 确认你在 Apache .conf 文件里增加了正确的Mime 类型.它应该是这样: AddType application/x-httpd-php3 .php3 ( PHP 3)
      或 AddType application/x-httpd-php .php ( PHP 4)
      也保证 AddType 这行没有包括在 块里,它们会使它无效。

    • 最后, Apache 1.2 和 Apache 1.3默认的配置文件的位置是不同的. 你应该检查你增加了AddType行的配置文件的位置 . 你可以在 httpd.conf 放一些明显的错误或改变,这样如果这文件被读的话,系统会通知你。


    9. 系统说使用: --activate-module=src/modules/php4/libphp4.a, 可那文件根本不存在, 我只好改成 --activate-module=src/modules/php4/libmodphp4.a 好了,它不工作了! 该怎么办?

    请注意 libphp4.a 事实并不存在. apache 进程会创建它!
    10. 我要把PHP编译成Apache的静态模块,用: --activate-module=src/modules/php4/libphp4.a 可是系统说我的编译器不是 ANSI 兼容的。

    这个错误消息是 Apache 误导的,可以用更新版本来修正它。
    11. 我用 --with-apxs编译PHP时, 我总是得到一些奇怪的错误。

    出现这样的情况可以从三点来检查. 第一, 因为某种原因,Apache 在编译apxs Perl 脚本的时候, 它没有创建适当的标志变量, 找到你的apxs脚本 (试试命令 which apxs, 通常在 /usr/local/apache/bin/apxs or /usr/sbin/apxs. 打开它找到象下面这样的行:
    my $CFG_CFLAGS_SHLIB  = ' ';          # substituted via Makefile.tmplmy $CFG_LD_SHLIB      = ' ';          # substituted via Makefile.tmplmy $CFG_LDFLAGS_SHLIB = ' ';          # substituted via Makefile.tmpl
    ログイン後にコピー
    如果你看到的是这样,那么问题就出在这里. 因为值里包含的是空格或其它不正确的值, 如 'q()'. 把它样变成象下面的那样:
    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
    ログイン後にコピー
    第二种可能仅仅出现在Red Hat 6.1 和 6.2上. apxs 脚本 Red Hat 版有错. 看这行:
    my $CFG_LIBEXECDIR    = 'modules';         # substituted via APACI install
    ログイン後にコピー
    如果你看到了,就把它改成下面的行:
    my $CFG_LIBEXECDIR    = '/usr/lib/apache'; # substituted via APACI install
    ログイン後にコピー
    第三, 你要是 重配置/重安装 Apache, 必须在 ./configure 后,在 make之前,执行make clean
    12. make时, 我得到很多关于microtime错误, 还有许多 RUSAGE_ stuff.

    在安装过程中 make时,如果你看到下面的错:
    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
    ログイン後にコピー

    那是你的系统出错了. 你应该修复 /usr/include 文件.具体做法是安装和你的glibc匹配的glibc-devel 包. 这些错绝对和PHP无关,为了证明,你可以这样做:
    $ cat >test.c <<X#include <sys/resource.h>X$ gcc -E test.c >/dev/null
    ログイン後にコピー
    如果出错,证明你的包含文件受损了.
    13. 我想升级PHP,我在哪可以看到我现在运行的PHP 的当初配置安装时所使用的./configure 一行的内容.?

    你可以看你安装PHP源目录下的 config.nice 文件. 如果不行还有另外一种方法.你只要简单运行
    <?php phpinfo(); ?>
    ログイン後にコピー
    脚本. 在输出页面的第一行,就是 ./configure 行, 是你当初用来配置PHP的那行.
    14. 编译带GD库的PHP时,它不是给一些奇怪的错, 就是执行时产生 segfaults 段错误.

    你必须确认你在编译 GD 库 和 PHP 时所使用同样的依赖库 (例如 libpng). 



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート