源码编译安装 PHP,请教关于./configure 的问题
背景
- 昨天想转slim框架为lumen 5.3.1版做API开发,lumen官网上标明PHP版本需要>=5.6.4,查了一下PHP官网的稳定版本,主要是5.6.22和7.0.11,于是就下载了PHP 7.0.11的源码版本
- 在
./configure [option]
的时候,以前都是一成不变的复制粘贴,从来没有思考过 ./configure 后面选项的意义,趁这次重新编译安装,正好弄清楚一下
laravel-china官网上目前标明的lumen 5.3.1对PHP版本的要求>=5.5.9是不正确的,php artisan的时候,会无法识别php里面的可变参数
...
语法。昨晚已私聊管理员龙哥,大家也可以注意一下这个PHP新语法
安装细节
我在测试安装php的openssl模块的时候,分别使用了以下方式:
./configure
./configure --with-openssl
./configure --with-openssl=/usr/local
./configure --with-openssl=/usr/local/xxx
结果出现了不同的结果
- 第一种不会安装openssl模块
- 第二种可以正常安装openssl模块
- 第三种可以正常安装openssl模块 ( 我的电脑存在/usr/local/include/openssl/evp.h )
- 第四种会报错:
configure: error: Cannot find OpenSSL's evp.h
(我的电脑/usr/local/xxx是空目录)
问题
由于第二种和第三种都可以安装成功。
- 假设指定了路径是用于调用系统自带的函数库,那为什么我检查./configure文件的源码,源码会判断只有
./configure --with-openssl=shared
和./configure --with-openssl=shared[,path]
才算是调用系统自带的函数库呢? - 假设指定了路径是用于创建不依赖于系统的独立函数库,那为什么第四种方式还是会报错呢?
- ./configure源码里面进行了四种判断,还麻烦大神系统地分析一下这四种情况分别对应什么需求,非常感谢^_^
./configure源码四种判断:
./configure --with-openssl=shared
./configure --with-openssl=shared[,path]
./configure
./configure --with-openssl
附录
./configure文件源码片段:
--with-openssl=/usr/local
是告诉configure程序,要在/usr/local
目录下去寻找openssl的头文件,你给他一个空目录,自然是找不到对应头文件的@leo 如果不指定目录,仅仅是--with-openssl的话,是会调用系统自带的还是编译安装源码里面的ext/openssl呢
@思过崖 看来你有一个比较大的误区,这里有两个东西:1.openssl头文件 2. php-openssl扩展,
ext/openssl
这个目录下的是php-openssl扩展的源码,并不包含openssl本身,也就是你加上--with-openssl
并不能让configure程序帮你安装openssl及其头文件,仅仅--with-openssl
是告诉configure程序,你的openssl头文件在系统默认的位置编译php-openssl扩展需要openssl头文件,如果没有openssl头文件就会编译失败(在configure阶段就会报错)
@leo 意思就是说:(1)./configure --with-openssl 会在系统默认位置寻找openssl头文件,如果找到就ok,找不到就会报错;
(2)./configure --with-openssl=/usr/local 会在/usr/local/include/openssl/目录下寻找openssl头文件,如果找到就ok,找不到就报错(指定目录适用于如下情况:系统安装有多个版本的openssl,想指定某个版本,或者openssl没有安装在默认的位置)
(3)找到了系统的openssl头文件,后续才可以编译ext/openssl目录下的源码,安装php-openssl扩展
。不知道我的理解对不对,非常感谢哈~~
@思过崖 对的
谢谢哈,豁然开朗了很多,google搞了很久没有弄清楚:grimacing: