编译问题 - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 编译问题 (http://www.webasp.net/article/6/5817.htm) | |||||||||
| -- 作者:未知 -- 发布日期: 2003-07-26 | |||||||||
| 这章节搜集了很多编译时会产生的错误情况。 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预处理器。例如:
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 ./configure 脚本. 见发行包里的 README.configure 当然也要看看PHP发行包里的 INSTALL 文件。 8. 我按照步骤一步一步安装了Apache模块(Unix下), 可是在浏览器里打开 PHP 脚本时它却问我是否要保存。 这意味着你的PHP模块没有被加载。你可从下面三点来检查:
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. 打开它找到象下面这样的行:
12. 在 make时, 我得到很多关于microtime错误, 还有许多 RUSAGE_ stuff. 在安装过程中 make时,如果你看到下面的错:
那是你的系统出错了. 你应该修复 /usr/include 文件.具体做法是安装和你的glibc匹配的glibc-devel 包. 这些错绝对和PHP无关,为了证明,你可以这样做:
13. 我想升级PHP,我在哪可以看到我现在运行的PHP 的当初配置安装时所使用的./configure 一行的内容.? 你可以看你安装PHP源目录下的 config.nice 文件. 如果不行还有另外一种方法.你只要简单运行
14. 编译带GD库的PHP时,它不是给一些奇怪的错, 就是执行时产生 segfaults 段错误. 你必须确认你在编译 GD 库 和 PHP 时所使用同样的依赖库 (例如 libpng). | |||||||||
| webasp.net |