php在虚拟机上编译,生成扩展文件全部是.dll不是.so
本机:win1o
虚拟机:Vmware2017--centos6.5
编译PHP:
安装依赖包:yum install -y libxml2-devel libicu-devel libpng-devel libjpeg-turbo-devel libmcrypt-devel libcurl-devel bzip2-devel openssl-devel gmp-devel freetype-devel
./configure \
--prefix=/usr/local/php \
--enable-bcmath \
--enable-exif \
--enable-fpm \
--enable-mbstring \
--enable-soap \
--enable-sockets \
--enable-zip \
--with-bz2 \
--with-curl \
--with-freetype-dir \
--with-gd \
--with-gettext \
--with-gmp \
--with-jpeg-dir=/usr/lib64 \
--enable-mysqlnd \
--with-mysql=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-pdo-mysql=/usr/local/mysql \
--with-png-dir=/usr/lib64 \
--with-readline \
--with-tsrm-pthreads \
--with-xmlrpc \
--with-zlib
我编译完后:打开php.int如图
为什么全部是 .dll文件?我打开phpinfo()提示GD开启,但是我去掉配置文件中的 ‘;’
就报错,说找不到相应的php_gd2.dll文件,
尝试解决:
1.不改,去掉“;”提示没有文件
2.将.dll文件改成.so文件,报错,
3.重新再源码包的位置追加GD扩展,指定到相关目录下提示:也是报错,说格式不对什么的。
4.重新编译整个PHP,换了版本也不行,照样是生成.dll扩展文件
下面是编译后扩展路径下的文件:
正确的编译后,php.int应该是
这样编译后后果是:
1.phpinfo()中提示扩展都能用但是,去掉;所有的扩展都不能用,
解决:1.去源码目录拷贝,没有发现有.dll文件
2.重新编译扩展,放到扩展目录下,提示.so文件不能用
3.去windos下拷贝对应的.dll提示报错不能用
4.改php.ini中的.dll为.so或者去掉后缀都提示错误
2.为什么我在虚拟机下编译的扩展是.dll?而不是.so?
3.在源码扩展目录下gd:也没有发现有gd2_.dll文件
下面有大哥回复说:
1.我步骤不对,其实我整个流程没有错,
2.说;extension=php_bz2.dll是WINDOS对应的扩展,跟linux无关,但是我在整个文件中搜索都没有找到和所以扩展相关的地方了,比如搜索;extension=或者是搜扩展关键词,都找不到extension=*gd2.so或者extension=;都没有!!!
是不是在
[gd]
; Tell the jpeg decode to ignore warnings and try to create
; a gd image. The warning will then be displayed as notices
; disabled by default
; http://php.net/gd.jpeg-ignore...
;gd.jpeg_ignore_warning = 0
加上
extension=gd2
extension=gd2.so
我尝试了都报错
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
注意看上面的注释,这里php.ini里面示例的是windows下的配置,并非正确编译的就没有
.dll
。linux下应该是
xxx.so
,在新的版本的php中,统一为xxxx
即没有后缀。dll是windows特有的PE文件,在linux环境是,你是不可能编译出dll文件来的。
最后再重复一下,上面的
;
是注释,意思就是windows下面配置的示例,只有windows环境下,并且存在这个dll时注释才能被取消。参见 Centos 7 Nginx + PHP 安装步骤
我用的也是Yii2,所以不存在兼容问题。