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如图

clipboard.png
为什么全部是 .dll文件?我打开phpinfo()提示GD开启,但是我去掉配置文件中的 ‘;’
就报错,说找不到相应的php_gd2.dll文件,
尝试解决:

   1.不改,去掉“;”提示没有文件
   2.将.dll文件改成.so文件,报错,
   3.重新再源码包的位置追加GD扩展,指定到相关目录下提示:也是报错,说格式不对什么的。
   4.重新编译整个PHP,换了版本也不行,照样是生成.dll扩展文件

下面是编译后扩展路径下的文件:

clipboard.png

clipboard.png

正确的编译后,php.int应该是

clipboard.png

这样编译后后果是:
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
我尝试了都报错

阅读 2.6k
评论
    2 个回答
    • 5.1k
    
    ;;;;;;;;;;;;;;;;;;;;;;
    ; Dynamic Extensions ;
    ;;;;;;;;;;;;;;;;;;;;;;
    
    ; If you wish to have an extension loaded automatically, use the following
    ; syntax:
    ;
    ;   extension=modulename.extension
    ;
    ; For example, on Windows:
    ;
    ;   extension=msql.dll
    ;
    ; ... or under UNIX:
    ;
    ;   extension=msql.so
    ;
    ; ... or with a path:
    ;
    ;   extension=/path/to/extension/msql.so
    ;
    ; If you only provide the name of the extension, PHP will look for it in its
    ; default extension directory.
    ;
    ; Windows Extensions
    ; Note that ODBC support is built in, so no dll is needed for it.
    ; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5+)
    ; extension folders as well as the separate PECL DLL download (PHP 5+).
    ; Be sure to appropriately set the extension_dir directive.
    ;
    ;extension=php_bz2.dll
    ;extension=php_curl.dll
    ;extension=php_fileinfo.dll
    ;extension=php_ftp.dll
    ;extension=php_gd2.dll
    ;extension=php_gettext.dll
    ;extension=php_gmp.dll
    ;extension=php_intl.dll
    ;extension=php_imap.dll
    ;extension=php_interbase.dll
    ;extension=php_ldap.dll
    ;extension=php_mbstring.dll
    ;extension=php_exif.dll      ; Must be after mbstring as it depends on it
    ;extension=php_mysqli.dll
    ;extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client
    ;extension=php_openssl.dll
    ;extension=php_pdo_firebird.dll
    ;extension=php_pdo_mysql.dll
    ;extension=php_pdo_oci.dll
    ;extension=php_pdo_odbc.dll
    ;extension=php_pdo_pgsql.dll
    ;extension=php_pdo_sqlite.dll
    ;extension=php_pgsql.dll
    ;extension=php_shmop.dll
    
    ; The MIBS data available in the PHP distribution must be installed.
    ; See http://www.php.net/manual/en/snmp.installation.php
    ;extension=php_snmp.dll
    
    ;extension=php_soap.dll
    ;extension=php_sockets.dll
    ;extension=php_sqlite3.dll
    ;extension=php_tidy.dll
    ;extension=php_xmlrpc.dll
    ;extension=php_xsl.dll

    注意看上面的注释,这里php.ini里面示例的是windows下的配置,并非正确编译的就没有.dll
    linux下应该是xxx.so,在新的版本的php中,统一为xxxx即没有后缀。

    dll是windows特有的PE文件,在linux环境是,你是不可能编译出dll文件来的。

    最后再重复一下,上面的;是注释,意思就是windows下面配置的示例,只有windows环境下,并且存在这个dll时注释才能被取消。

      相似问题
      推荐文章