在Mac OS上自行编译安装Apache服务器和PHP解释器


Posted in PHP onDecember 24, 2015

Apache 2.2.27和PHP 5.5.12在Mac OS X 10.8.5编译安装过程:
在开始之前首先升级Xcode的组件: preferences => Downloads => 下载Command Line Tools包

然后进入Apache的源码包,对于大部分的源码包都可以使用下面这个指令来查看编译选项:

./configure --help

配置编译选项:

./configure --prefix=/Users/levin/dev/apache2.2.27 --enable-modules=most --enable-mods-shared=all

报错:

checking for APR-util... yes
checking for gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc
checking whether the C compiler works... no
configure: error: in `/Users/levin/Downloads/httpd-2.2.27':
configure: error: C compiler cannot create executables
See `config.log' for more details

上面的报错是指路径:

/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc

不存在

解决方法:

cd /Applications/Xcode.app/Contents/Developer/Toolchains
sudo ln -s XcodeDefault.xctoolchain OSX10.8.xctoolchain

接着编译并安装:

make
make install

编辑配置文件httpd.conf,一般修改监听端口、运行Apache的用户和组、服务器名称、开启gzip等配置。

进入安装好的目录启动Apache:

./bin/apachectl start

安装PHP

关于PHP编译选项可以参考: PHP: List of core configure options - Manual

./configure --prefix=/Users/levin/dev/php5.5.12 --with-apxs2=/Users/levin/dev/apache2.2.27/bin/apxs --with-config-file-path=/Users/levin/dev/php5.5.12/etc --with-openssl --with-zlib --enable-bcmath --with-bz2 --with-curl --enable-ftp --with-gd --enable-gd-native-ttf --with-mhash --enable-mbstring --enable-soap --enable-zip --enable-sockets --with-mysql=/usr/local/mysql-5.6.12-osx10.7-x86_64 --with-mysqli=/usr/local/mysql-5.6.12-osx10.7-x86_64/bin/mysql_config --with-iconv --with-pear --enable-opcache
make

整个编译过程需要5-10分钟,视硬件配置而定,可以先去弄杯牛奶喝

发生错误:

Undefined symbols for architecture x86_64:
 "_res_9_init", referenced from:
   _zif_dns_get_mx in dns.o
   _zif_dns_get_record in dns.o
   _zif_dns_check_record in dns.o
 "_res_9_search", referenced from:
   _zif_dns_get_mx in dns.o
   _zif_dns_get_record in dns.o
   _zif_dns_check_record in dns.o
 "_res_9_dn_skipname", referenced from:
   _zif_dns_get_mx in dns.o
   _zif_dns_get_record in dns.o
 "_res_9_dn_expand", referenced from:
   _zif_dns_get_mx in dns.o
   _php_parserr in dns.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [libs/libphp5.bundle] Error 1

解决:

export LDFLAGS=-lresolv

错误:

dyld: Library not loaded: libmysqlclient.18.dylib
 Referenced from: /Users/levin/Downloads/php-5.5.12/sapi/cli/php
 Reason: image not found
...
make: *** [ext/phar/phar.php] Error 133

解决:

cd /usr/lib
ln -s /usr/local/mysql-5.6.12-osx10.7-x86_64/lib/libmysqlclient.18.dylib libmysqlclient.18.dylib

重新编译并安装:

make clean && make
make install

安装完成,此时需要从PHP的源码目录copy一份配置文件到安装目录的etc文件夹下面并改名为php.ini,需要更改PHP的配置时就使用该文件即可。

PHP 相关文章推荐
15种PHP Encoder的比较
Apr 17 PHP
Discuz 模板语句分析及知识技巧
Aug 21 PHP
使用PHP计算两个路径的相对路径
Jun 14 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
php阻止页面后退的方法分享
Feb 17 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
May 15 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
php实现上传图片文件代码
Jul 19 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 PHP
PHP实现文件上传和多文件上传
Dec 24 #PHP
纯PHP代码实现支付宝批量付款
Dec 24 #PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 #PHP
4种PHP异步执行的常用方式
Dec 24 #PHP
php实现异步数据调用的方法
Dec 24 #PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 #PHP
深入浅析php json 格式控制
Dec 24 #PHP
You might like
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
3种平台下安装php4经验点滴
2006/10/09 PHP
mysql 性能的检查和优化方法
2009/06/21 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
javascript 打印页面代码
2009/03/24 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
利用Python如何生成便签图片详解
2018/07/09 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
获奖的大学生创业计划书
2014/01/05 职场文书
机关作风建设自查报告
2014/10/22 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
庆七一晚会主持词
2015/06/30 职场文书