|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在学习HTML中我想边学边做是最有效的方式,当然这一方式对于学习PHP同样是最有效的。编译|成绩 这章节汇集了良多编译时会发生的毛病情形。 1. 我用匿名CVS失掉最新版的源代码包, 但没有设置装备摆设剧本文件! 2. 我在设置装备摆设 PHP 在 Apache下任务时出了成绩。 它说不克不及找到 httpd.h, 可是我看它就在那边! 3. 当我运转conifgure时,它说它不克不及找到include文件或 一些库: GD, gdbm, 或其它的一些包! 4. 我在编译文件 language-parser.tab.c时, 失足,提醒: yytname undeclared. 5. 当我运转 make, 后来正常但 终究掉败了,在毗连最初的使用时,失足说找不到一些文件。 6. 在毗连 PHP 时, 出一堆错说 undefined references。 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_ stuff. 13. 我想晋级PHP,我在哪可以看到我如今运转的PHP 确当初设置装备摆设装置时所利用的./configure 一行的内容? 14. 编译带GD库的PHP时,它不是给一些奇异的错, 就是履行时发生 segfaults 段毛病.
1. 我用匿名CVS失掉最新版的源代码包, 但没有设置装备摆设剧本文件!
你必需装置 GNU autoconf 包,如许可以从 configure.in生成设置装备摆设剧本文件. 只需运转在CVS办事器失掉源代码的顶级目次下的 ./buildconf。 (注重, 除非你运转configure --enable-maintainer-mode 选项, 设置装备摆设剧本是不会从头生成, 即便configure.in 文件已更新, 所以当你发明 configure.in 改动了,你也要手工做一遍. 在config或config.status 运转后应当在你的Makefile里能看到象@VARIABLE@如许的标号。)
2. 我在设置装备摆设 PHP 在 Apache下任务时出了成绩。 它说不克不及找到 httpd.h, 可是我看它就在那边!
你要告知 configure/setup 剧本 Apache 的顶级目次的地位。 就是说你要标明 --with-apache=/path/to/apache , 而不是 --with-apache=/path/to/apache/src.
3. 当我运转conifgure时,它说它不克不及找到include文件或 一些库: GD, gdbm, 或其它的一些包!
你可以看看 configure 剧本,那些头文件或非尺度库的地位,要送一些特别的标记给C预处置器。例如:- CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
复制代码 假设你的shell利用 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/找到最新版本.
5. 当我运转 make, 后来正常但 终究掉败了,在毗连最初的使用时,失足说找不到一些文件。
一些老版本的 make 不克不及把 functions 目次下的编译的文件放到统一个目次下, 试着运转 cp *.o functions 然后再运转 make 看看是不是会好些。 假如好了,你真的应当更新你的GNU Make的版本了。
6. 在毗连 PHP 时, 出一堆错说 undefined references。
看看文件里的毗连行,确认一切的相干包都已准确包括。凡是如许是由于短少'-ldl',还有一些你想撑持的数据库包。
假如你是在毗连到 Apache 1.2.x, 你记得要在在EXTRA_LIBS 行增添一些额定的信息 而且重运转 Apache's Configure 剧本吗? 拜见刊行包里的 INSTALL 文件。
良多人说他们一增添 '-ldl' 即刻失掉了 libphp4.a 。
7. 我不清晰如何在 Apache 1.3下编译PHP。
现实上很复杂,按上面的步调:
获得 Apache 1.3 源代码,鄙人面的地位 http://www.apache.org/dist/.
在某个目次下解压出来, 如 /usr/local/src/apache-1.3.
在PHP的刊行包目次下,编译 PHP ,./configure --with-apache=/<path>/apache-1.3 ( 用户实践的apache-1.3目次地位替换 <path> .
打入: make 然后: make install 编译PHP,拷必需的文件到Apache目次下。
改动到你的 /<path>/apache-1.3/src 目次,编纂 Configuration文件. 把上面的行增添到文件里: AddModule modules/php4/libphp4.a.
打入: ./Configure 然后: make.
如许你就有了一个 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 这行没有包含在 <Virtualhost> 或 <Directory> 块里,它们会使它有效。
最初, 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 文件. 假如不可还有别的一种办法.你只需复杂运转剧本. 在输入页面的第一行,就是 ./configure 行, 是你现在用来设置装备摆设PHP的那行.
14. 编译带GD库的PHP时,它不是给一些奇异的错, 就是履行时发生 segfaults 段毛病.
你必需确认你在编译 GD 库 和 PHP 时所利用一样的依附库 (例如 libpng). 基础这个东西,有人问学php需要任何基础不? |
|