php 重新编译_PHP: 编译问题 - Manual

编译问题

本节汇集了大多数编译时出现的常见错误。

我用匿名 GIT 服务得到了最新版的 PHP,但是里面没有 configure 脚本!

你必须安装有 GNU autoconf 包,这样才可以从

configure.in生成 configure 脚本。从 GIT 服务中得到源程序后只要在最高层的目录中运行

./buildconf即可。(同时要注意,除非你用了

--enable-maintainer-mode选项来运行 configure,否则即使

configure.in文件更新了,configure 脚本也不会自动重新生成。所以当你发现

configure.in文件更新了时要确保手工重新生成 configure 脚本。有一个症状是在 configure 之后或者运行

config.status时在 Makefile 中寻找类似 @VARIABLE@ 的东西。)

我在配置 PHP 和 Apache 一起工作时遇到了问题。说没找到

httpd.h,但这个文件明明就在那里!

你需要告诉 configure/setup 脚本你的 Apache 源程序最上层的目录位置。这意味着你需要这样指定

--with-apache=/path/to/apache而

不是这样

--with-apache=/path/to/apache/src。

当运行 PHP 配置时(

./configure),遇到类似如下的问题:

checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up

请认真阅读 PHP 的

安装说明,并注意要编译 PHP 需要同时安装 flex 和 bison。根据设置的不同,可以从源代码编译 bison 和 flex,要么通过已编译好的发行包,例如 RPM。

当试图启动 Apache 时,得到类似如下错误信息:

fatal: relocation error: file /path/to/libphp4.so: symbol ap_block_alarms: referenced symbol not found

该错误通常在 Apache 的核心程序被编译为共享用途的 DSO 库时发生。请尝试重新配置 Apache,确保至少使用了如下参数:

--enable-shared=max --enable-rule=SHARED_CORE

更多信息,请阅读 Apache 顶层目录的

INSTALL文件或者 Apache 的

» DSO 手册。

当运行 configure 时,报告说找不到头文件或 GD 库或 gdbm,或其它的什么包!

可以通过指定附加的选项让 configure 脚本在非标准的路径中寻找头文件和库并传递给 C 预处理器和连接器,例如:

CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure

如果用 csh 的变种作为你的登录 shell(为什么?),那就是:

env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure

当编译

language-parser.tab.c文件时,报错说

yytname undeclared。

当我运行

make时,看上去一切正常,可当连接最后的程序时报告说找不到某些文件而失败了。

一些旧版本的 make 没有正确将 functions 目录下编译后的文件放到同一个目录下。试试运行

cp *.o functions然后再运行

make看看有没有什么帮助。如果成功了,那你确实需要更新到最新版的 GNU make。

当连接 PHP 时,报告说有一些未定义的引用。

看看连接的这一行命令,确认所有适当的库都包括在最后了。通常可能漏掉了“-ldl”和你包括的任何数据库支持所需要的库。

一些人也报告说在和 Apache 连接时他们不得不紧接着

libphp4.a之后加上“-ldl”。

我不知道怎样把 PHP 和 Apache 1.3 一起编译。

这其实很简单。小心地照着以下步骤来:解压缩到某处,例如

/usr/local/src/apache-1.3。

编译 PHP,先运行

./configure --with-apache=//apache-1.3(用你 apache-1.3 所在的真实路径替换掉 。)

输入

make接着是

make install来编译 PHP 并把必要的文件拷贝到 Apache 的源程序目录树中。

改变当前目录到

//apache-1.3/src目录并编辑

Configuration文件。添加这一行:

AddModule modules/php4/libphp4.a。

输入

./configure接着是

make。

你现在应该有一个包括 PHP 支持的 httpd 可执行程序了!

注意:也可以用新的 Apache

./configure脚本。参见 Apache 发行包中

README.configure文件中的说明。也看看 PHP 发行包中的

INSTALL文件。

我按照所有的步骤在 UNIX 下安装了PHP 的 Apache 模块版本,但我的 PHP 脚本被显示在浏览器中或者提示保存此文件。

这说明 PHP 模块出于某些原因没有被调用。在寻求更多帮助前先检查三件事:确认你运行的 httpd 程序就是你刚刚编译的新 httpd 程序。运行:

/path/to/binary/httpd -l

如果你没看到

mod_php4.c被列出来那你就没有运行对程序。找到并正确安装程序。

确认你在

Apache .conf文件中加入了正确的 Mime 类型。应该是:

AddType application/x-httpd-php .php

也确认 AddType 这一行没有隐藏在 或者 块中,这可能会造成你的测试脚本所在位置没有被应用到此设置。

最后,Apache 1.2 和 Apache 1.3 之间默认配置文件的位置改变了。你要确认你添加 AddType 行的文件就是实际上用的。你可以在你的 httpd.conf 中添加一个明显的语法错误或者其它明显修改,这可以告诉你是否读取了正确的文件。

说要用:

--activate-module=src/modules/php4/libphp4.a,但是此文件根本不存在,于是我改成了

--activate-module=src/modules/php4/libmodphp4.a,结果不行。怎么回事?

注意

libphp4.a文件本来就不该存在,apache 进程将创建它!

当我用

--activate-module=src/modules/php4/libphp4.a试着把 PHP 编译成 Apache 的静态模块时,报告说我的编译器不服从 ANSI 标准。

这是一个 Apache 误报的错误信息,在新的版本中已经修正了。

当我用

--with-apxs编译 PHP 时得到奇怪的错误信息。

这里要检查三件事。首先,出于某些原因当 Apache 生成 apxs Perl 脚本时,有时没有正确的编译和标记变量就结束了。找到你的 apxs 脚本(用命令

which apxs),有时会在

/usr/local/apache/bin/apxs或者

/usr/sbin/apxs。打开并检查类似如下的行:

my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl

my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl

my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl

如果你看到这几行,那问题就在这里。它们可能包含了仅仅空格或者其它不正确的值,例如“q()”。改成这样:

my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl

my $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmpl

my $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl

第二个可能的问题仅可能在在 Red Hat 6.1 和 6.2 中发生。Red Hat 发行的 apxs 脚本坏了。查找这一行:

my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install

如果你看到上面这一行,改成这样:

my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install

最后,如果你重新配置或者重装了 Apache,在

./configure之后和

make之前增加一个

make clean命令。

make的过程中,在 microtime 中出错,还有很多

RUSAGE_之类的东西。

如果

make时遇到类似这样的问题:

microtime.c: In function `php_if_getrusage':

microtime.c:94: storage size of `usg' isn't known

microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function)

microtime.c:97: (Each undeclared identifier is reported only once

microtime.c:97: for each function it appears in.)

microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)

make[3]: *** [microtime.lo] Error 1

make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'

make[2]: *** [all-recursive] Error 1

make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/home/master/php-4.0.1/ext'

make: *** [all-recursive] Error 1

你的系统坏了。你需要安装一个符合你的 glibc 的 glibc-devel 包来修复

/usr/include中的文件。这和 PHP 绝对没有任何关系。要证实这一点,试试这个简单的测试:

$ cat >test.c <

#include

X

$ gcc -E test.c >/dev/null

如果出现错误,那你就知道头文件坏了。

当带 MySQL 编译 PHP 时,可以正确地运行configure,但是在

make的过程中出现了类似以下的错误信息:

ext/mysql/ libmysqlclient /my_tempnam.o(.text+0x46): In function

my_tempnam': /php4/ext/mysql/ libmysqlclient /my_tempnam.c:103: the

use of tempnam' is dangerous, better use mkstemp',这是怎么回事

首先,我们需要认识到这只是个

警告,而非致命错误。由于这条信息通常是在

make的最后输出的,所以看起来它可能像是一个致命错误,但实际上不是。当然,如果将编译器设置成遇见警告信息时停止,则这也可以算是致命错误。另外值得一提的是,MySQL 的支持是默认打开的。

注意:

自 PHP 4.3.2 起,你将在编译(make)结束后看到下面的文字:

Build complete.

(It is safe to ignore warnings about tempnam and tmpnam).

我想升级我的 PHP。上哪里找到我用来配置目前的 PHP 的

./configure的参数呢?

要么在你用来编译当前的 PHP 的源码树中查看 config.nice 文件,如果没有,只要运行此脚本:

在输出的顶端显示了用来配置此 PHP 的

./configure参数。

和 GD 库一起编译 PHP 时,要么给出一个奇怪的编译错误,要么在运行时出现 segfaults。

确保你的 GD 库和 PHP 在连接时使用了用同样的支持库(例如 libpng)。

当编译 PHP 时我看到一些随机的错误,好像死了。我用的是 Solaris,不知道有没有关系。

当编译 PHP 时使用非 GNU 的工具会导致问题。确保使用 GNU 工具来确保能够正确编译 PHP。例如,在 Solaris 下面不论使用 SunOS BSD 兼容或者 Solaris 版本的

sed都不行,但是使用 GNU 或者 Sun POSIX (xpg4) 版本的

sed就可以。相关连接:

» GNU sed,

» GNU flex,

» GNU bison。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xampp (phpStudy重新编译版) 2016 此版本由phpStudy作者重新编译,精简掉五分之四,安装包只有35M; 原xampp解压后1250M,去臃肿精简掉980M仅剩250M。 对控制面板进行大幅优化更新, 放弃掉旧版本许多无用的鸡肋功能。 增加 PHP5.3、PHP5.5和PHP7.0 一键切换。将程序汉化修改,增加部分功能。 将apache升级到最新版2.4.18,php升级到5.6.16和7.0.1。 mysql升级到5.7.10,tomcat升级到7.0.56。 程序包35M,解压后,启动即可,易于安装和设置。 ### 注意: PHP5.3、php5.4需要安装32位的vc9运行库; php5.6需要安装32位的vc11运行库。 php7.0需要安装32位的vc14运行库。 新增PHP5.3、PHP5.6和PHP7.0一键切换;点 [PHP切换] 进行切换。 ### MySQL 默认密码 ### User: root Password:root 安装使用: 1: 勾选 [Service] 那栏下的按钮, 实现安装服务. 2: 点击各功能的 start 按钮来启动进程. 3: 点击各功能的 admin 按钮来管理功能. 4: 启动 tomcat 需要先安装JDK. 如何卸载: 通过 点 [其他工具] > [卸载全部服务] 或点托盘菜单 > [卸载服务] 卸载相关服务后删除即可。 作者的集成包: 1: phpStudy PHP集成包 phpStudy 支持php5.2到7.0一键切换,24种组合自由切换。 phpStudy全面支持Apache | Nginx | IIS 6/7/8 | Lighttpd; 支持站点设置,数据库备份还原等功能强大。 2: JspStudy JSP+PHP集成包 JspStudy 支持tomcat6和tomcat7一键切换;支持服务和非服务模式运行。 JspStudy集成JDK+tomcat +Apache+PHP+MySQL,将复杂的JSP环境配置简单化。 无需设置环境变量一键配好JSP+PHP环境。 phpStudy+JspStudy 详情访问 http://www.phpstudy.net/a.php/207.html 寻求帮助访问官网: http://www.xampps.com [email protected] http://www.xampps.com
很全面的php中文开打文档 一下是目录 ■版权信息 ■PHP 手册 ■序言 ■入门指引 ■简介 ■简明教程 ■安装与配置 ■安装前需要考虑的事项 ■Unix 系统下的安装 ■Mac OS X 系统下的安装 ■Windows 系统下的安装 ■Installation on Cloud Computing platforms ■FastCGI 进程管理器 (FPM) ■PECL 扩展库安装 ■还有问题? ■运行时配置 ■语言参考 ■基本语法 ■类型 ■变量 ■常量 ■表达式 ■运算符 ■控制结构 ■函数 ■类与对象 ■命名空间 ■异常处理 ■引用的解释 ■预定义变量 ■预定义异常 ■预定义接口 ■Context options and parameters ■Supported Protocols and Wrappers ■安全 ■简介 ■总则 ■以 CGI 模式安装时 ■以 Apache 模块安装时 ■文件系统安全 ■数据库安全 ■错误报告 ■使用 Register Globals ■用户提交的数据 ■魔术引号 ■隐藏 PHP ■保持更新 ■特点 ■用 PHP 进行 HTTP 认证 ■Cookie ■会话 ■处理 XForms ■文件上传处理 ■使用远程文件 ■连接处理 ■数据库永久连接 ■安全模式 ■PHP 的命令行模式 ■垃圾回收机制 ■函数参考 ■影响 PHP 行为的扩展 ■音频格式操作 ■身份认证服务 ■日历和事件相关扩展 ■命令行特有的扩展 ■压缩与归档扩展 ■信用卡处理 ■加密扩展 ■数据库扩展 ■文件系统相关扩展 ■国际化与字符编码支持 ■图像生成和处理 ■邮件相关扩展 ■数学扩展 ■非文本内容的MIME输出 ■进程控制扩展 ■其它基本扩展 ■其它服务 ■搜索引擎扩展 ■面向服务器的扩展 ■Session 扩展 ■文本处理 ■与变量和类型有关的扩展 ■Web Services ■Windows 平台下的扩展 ■XML 操作 ■PHP 核心:Zend 引擎的骇客指南 ■序言 ■"counter" 扩展 - 一个连续的实例 ■PHP 5 构建系统 ■扩展的结构 ■内存管理 ■变量的使用 ■函数的编写 ■类和对象的使用 ■资源的使用 ■INI 设置的使用 ■流的使用 ■PDO 驱动 ■扩展相关 FAQ ■Zend Engine 2 API 参考 ■Zend Engine 2 操作码列表 ■Zend Engine 1 ■FAQ — FAQ:常见问题 ■一般信息 ■邮件列表 ■获取 PHP ■数据库问题 ■安装 — 安装常见问题编译问题 ■使用 PHP ■Password Hashing — Safe Password Hashing ■PHP 和 HTML ■PHP 和 COM ■PHP 和其它语言 ■从 PHP 4 移植到 PHP 5 ■杂类问题 ■附录 ■PHP 及其相关工程的历史 ■从 PHP 5.2.x 移植到 PHP 5.3.x ■Migrating from PHP 5.1.x to PHP 5.2.x ■Migrating from PHP 5.0.x to PHP 5.1.x ■从 PHP 4 移植到 PHP 5 ■类与对象(PHP 4) ■PHP 的调试 ■配置选项 ■php.ini 配置选项 ■扩展库分类 ■函数别名列表 ■保留字列表 ■资源类型列表 ■可用过滤器列表 ■所支持的套接字传输器(Socket Transports)列表 ■PHP 类型比较表 ■解析器代号列表 ■Userland Naming Guide ■关于本手册 ■Creative Commons Attribution 3.0 ■函数索引 ■CHM 版本 ■关于此版本 ■Using PHP Manual CHM Edition ■The Full Text Search ■Specialities of this Edition ■Integrating the PHP Manual ■Skin development ■CHM Edition Credits --------------------------------------------------------------------------------
PHP 手册 by: Mehdi Achour Friedhelm Betz Antony Dovgal Nuno Lopes Hannes Magnusson Georg Richter Damien Seguy Jakub Vrana 其他贡献者 编译:陈浩(Haohappy) 编译时间: 2009-02-15 下次编译: 2009-03-17 Edited By: Philip Olson © 1997-2008 PHP 文档组 中文翻译人员: 王远之 肖理达 肖盛文 黄啸宇 宋琪 陈伯乐 陈浩 陈岗 刘铭 洪建家 版权信息 PHP 手册 前言 入门指引 简介 简明教程 安装与配置 安装前需要考虑的事项 Unix 系统下的安装 Mac OS X 系统下的安装 Windows 系统下的安装 PECL 扩展库安装 还有问题? 运行时配置 语言参考 基本语法 类型 变量 常量 表达式 运算符 控制结构 函数 类与对象(PHP 4) 类与对象(PHP 5) 命名空间 异常处理 引用的解释 Predefined variables Predefined Exceptions Predefined Interfaces Context options and parameters 安全 简介 总则 以 CGI 模式安装时 以 Apache 模块安装时 文件系统安全 数据库安全 错误报告 使用 Register Globals 用户提交的数据 魔术引号 隐藏 PHP 保持更新 特点 用 PHP 进行 HTTP 认证 Cookie 会话 处理 XForms 文件上传处理 使用远程文件 连接处理 数据库永久连接 安全模式 PHP 的命令行模式 函数参考 影响PHP行为的扩展 音频格式操作 身份认证服务 日历和事件相关扩展 命令行特有的扩展 压缩与归档扩展 信用卡处理 加密扩展 数据库扩展 文件系统相关扩展 国际化与字符编码支持 图像生成和处理 邮件相关扩展 数学扩展 非文本内容的MIME输出 进程控制扩展 其它基本扩展 其它服务 搜索引擎扩展 面向服务器的扩展 Session扩展 文本处理 与变量和类型有关的扩展 Web Services Windows平台下的扩展 XML操作 PHP at the Core: A Hacker's Guide to the Zend Engine Preface The "counter" Extension - A Continuing Example The PHP 5 build system Extension structure Memory management Working with variables Writing functions Working with classes and objects Working with resources Working with INI settings Working with streams PDO Driver How-To Extension FAQs Zend Engine 2 API reference Zend Engine 1 The future: PHP 6 and Zend Engine 3 FAQ — FAQ:常见问题 一般信息 邮件列表 获取 PHP 数据库问题 安装 — 安装常见问题 编译问题 使用 PHP PHP 和 HTML PHP 和 COM PHP 和其它语言 从 PHP 4 移植到 PHP 5 杂类问题 附录 PHP 及其相关工程的历史 Migrating from PHP 5.1.x to PHP 5.2.x Migrating from PHP 5.0.x to PHP 5.1.x 从 PHP 4 移植到 PHP 5 PHP 的调试 配置选项 php.ini 配置选项 扩展库分类 函数别名列表 保留字列表 资源类型列表 支持的协议/封装协议列表 可用过滤器列表 所支持的套接字传输器(Socket Transports)列表 PHP 类型比较表 解析器代号列表 Userland Naming Guide 关于本手册 Creative Commons Attribution 3.0 函数索引 CHM 版本 关于此版本 Using PHP Manual CHM Edition The Full Text Search Specialities of this Edition Integrating the PHP Manual Skin development CHM Edition Credits

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值