Mac Pro 編譯安裝 PHP 5.6.21 及 問題彙總

系統環境php

操做系統:OS X 10.11.5html

Xcode:7.3.1mysql

注意sql

編譯以前,須要安裝 xcodeHomebrew 套件!segmentfault

Mac Pro 安裝 Homebrew 軟件包管理工具api

 

一、準備相關軟件包,統一放到 /usr/local/src/php 目錄下:xcode

http://cn2.php.net/distributions/php-5.6.21.tar.gzbash

http://ncu.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gzcurl

ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gzsocket

http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

https://sourceforge.net/projects/libpng/files/libpng16/1.6.21/libpng-1.6.21.tar.xz/download

http://www.ijg.org/files/jpegsrc.v9a.tar.gz

http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz

http://download.savannah.gnu.org/releases/freetype/freetype-2.4.12.tar.gz

http://ftp.gnu.org/gnu/gettext/gettext-0.19.tar.gz

 

二、安裝依賴庫

# 安裝 libmcrypt
cd /usr/local/src/php
tar -xzvf ./libmcrypt-2.5.7.tar.gz
cd ./libmcrypt-2.5.7
./configure
sudo make 
sudo make install

# 安裝 libmhash
cd /usr/local/src/php
tar -xzvf ./mhash-0.9.9.9.tar.gz
cd ./mhash-0.9.9.9
./configure
sudo make
sudo make install

# 安裝 libiconv
cd /usr/local/src/php
tar -xzvf ./libiconv-1.14.tar.gz
cd ./libiconv-1.14
./configure
sudo make
sudo make install

# 安裝 bzip2
cd /usr/local/src/php
tar -xzvf ./bzip2-1.0.6.tar.gz
cd ./bzip2-1.0.6
sudo make 
sudo make install

# 安裝 libpng (png圖片處理, GD庫依賴)
cd /usr/local/src/php
tar -xzvf ./libpng-1.6.21.tar.xz
cd ./libpng-1.6.21
./configure
sudo make
sudo make install

# 安裝 ibjpeg (jpg圖片處理, GD庫依賴)
cd /usr/local/src/php
tar -xzvf ./jpegsrc.v9a.tar.gz
cd ./jpeg-9a
./configure
sudo make
sudo make install

# 安裝 freetype
cd /usr/local/src/php
tar -xzvf ./freetype-2.4.12.tar.gz
cd ./freetype-2.4.12
./configure
sudo make
sudo make install

# 安裝 gettext
cd /usr/local/src/php
tar -xzvf ./gettext-0.19.tar.gz
cd ./gettext-0.19
./configure
sudo make
sudo make install

 

三、安裝PHP

# 解壓PHP安裝包
cd /usr/local/src/php
tar -xzvf ./php-5.6.21.tar.gz
cd ./php-5.6.21
# 編譯
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-openssl \
--with-zlib \
--with-bz2 \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-gettext \
--with-mhash \
--with-freetype-dir \
--with-mcrypt \
--with-iconv \
--with-curl \
--with-xmlrpc \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--enable-calendar \
--enable-pdo \
--enable-zip \
--enable-mbstring \
--enable-mbregex \
--enable-bcmath \
--enable-soap \
--enable-sockets \
--enable-ftp \
--enable-gd-native-ttf \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-xml \
--enable-pcntl \
--enable-fpm \
--enable-opcache \
--without-pear

報錯1

configure: error: Cannot find OpenSSL's <evp.h>

解決

(1)、安裝 openssl

brew install openssl

(2)、把 --with-openssl 改成 --with-openssl=/usr/local/opt/openssl

(若是安裝了 brew,那麼openssl的路徑爲 /usr/local/opt/openssl/

./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-openssl=/usr/local/opt/openssl \
--with-zlib \
--with-bz2 \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-gettext \
--with-mhash \
--with-freetype-dir \
--with-mcrypt \
--with-iconv \
--with-curl \
--with-xmlrpc \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--enable-calendar \
--enable-pdo \
--enable-zip \
--enable-mbstring \
--enable-mbregex \
--enable-bcmath \
--enable-soap \
--enable-sockets \
--enable-ftp \
--enable-gd-native-ttf \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-xml \
--enable-pcntl \
--enable-fpm \
--enable-opcache \
--without-pear

 

# 執行 make
sudo make

【報錯2】

Undefined symbols for architecture x86_64:
  "_PKCS5_PBKDF2_HMAC", referenced from:
      _zif_openssl_pbkdf2 in openssl.o
  "_TLSv1_1_client_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_1_server_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_2_client_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_2_server_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
      ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sapi/cli/php] Error 1

【解決】

修改 Makefile 文件

找到 EXTRA_LIBS 節點,刪除全部的 -lssl 和 -lcrypto 而後追加 libssl.dylib 和 libcrypto.dylib 的路徑(若是你安裝了 brew,那麼則是 /usr/local/opt/openssl/lib/),從新運行 make 命令。

附上我修改後的 MakeFile EXTRA_LIBS 那一行:

EXTRA_LIBS =  -lz -lresolv  -lintl -lpng -lz -ljpeg  -lcurl -lbz2 -lz -lm -lxml2 -lz -licucore -lm -lcurl -lxml2 -lz -licucore -lm -lfreetype -lz -lbz2 -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm /usr/local/opt/openssl/lib/libcrypto.dylib /usr/local/opt/openssl/lib/libssl.dylib

 # 從新編譯
sudo make clean
sudo make

【報錯3】

Undefined symbols for architecture x86_64:
  "_libiconv_open", referenced from:
      _do_convert in gdkanji.o
      _convert in encodings.o
  "_libiconv", referenced from:
      _do_convert in gdkanji.o
      _convert in encodings.o
  "_libiconv_close", referenced from:
      _do_convert in gdkanji.o
      _convert in encodings.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [libs/libphp5.bundle] Error 1

 【分析】

Makefile中有兩個 -liconv,因而想到,會不會在系統中存在兩份不一樣的 libiconv 呢,果真,系統自己 和 brew(或本身編譯)各有一份iconv:

$ nm /usr/lib/libiconv.dylib | grep iconv
00000000000f1af0 S ___iconv_2VersionNumber
00000000000f1b90 S ___iconv_2VersionString
00000000000f60f0 D __libiconv_version
000000000000a1e1 T _iconv
000000000000a5a0 T _iconv_canonicalize
0000000000013164 T _iconv_close 0000000000013171 T _iconv_open
000000000000a72c T _iconvctl
000000000000a20f T _iconvlist
0000000000014dbd T _libiconv_relocate
0000000000014cff T _libiconv_set_relocation_prefix

$ nm /usr/local/lib/libiconv.dylib | grep iconv
00000000000f90c0 D __libiconv_version
0000000000002f10 T _iconv_canonicalize
0000000000002650 T _libiconv
0000000000002680 T _libiconv_close
00000000000011d0 T _libiconv_open
0000000000002690 T _libiconv_open_into
0000000000017970 t _libiconv_relocate
00000000000fa7a8 b _libiconv_relocate.initialized.b
00000000000178b0 T _libiconv_set_relocation_prefix
0000000000002bc0 T _libiconvctl
0000000000002d00 T _libiconvlist

因此就致使了–with-iconv-dir 不管配置成哪個都連接不成功。

解決

最終的解決方案是直接修改Makefile,把裏面的 兩個-liconv分別替換成 /usr/lib/libiconv.dylib, /usr/local/lib/libiconv.dylib。使用絕對路徑以後,這個連接就沒有問題了。

EXTRA_LIBS =  -lz -lresolv  -lintl -lpng -lz -ljpeg  -lcurl -lbz2 -lz -lm -lxml2 -lz -licucore -lm -lcurl -lxml2 -lz -licucore -lm -lfreetype -lz -lbz2 -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm /usr/local/opt/openssl/lib/libcrypto.dylib /usr/local/opt/openssl/lib/libssl.dylib /usr/lib/libiconv.dylib /usr/local/lib/libiconv.dylib 

 # 從新編譯
sudo make clean
sudo make

報錯4

"_mcrypt_enc_get_algorithms_name", referenced from:
      _zif_mcrypt_get_cipher_name in mcrypt.o
    ......

解決

(1)、安裝 mcrypt

brew install libmcrypt

(2)、修改 Makefile 文件,追加 libmcrypt 庫的完整路徑 /usr/local/lib/libmcrypt.dylib

EXTRA_LIBS =  -lz -lresolv  -lintl -lpng -lz -ljpeg  -lcurl -lbz2 -lz -lm -lxml2 -lz -licucore -lm -lcurl -lxml2 -lz -licucore -lm -lfreetype -lz -lbz2 -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm /usr/local/lib/libmcrypt.dylib /usr/local/opt/openssl/lib/libcrypto.dylib /usr/local/opt/openssl/lib/libssl.dylib /usr/lib/libiconv.dylib /usr/local/lib/libiconv.dylib 

 

終於沒報錯,繼續安裝,須要 sudo 一下得到權限

 # 從新編譯
sudo make clean
sudo make
sudo make install

 

四、經過如下指令 啓動 和 中止 php-fpm

# 啓動 php-fpm
php-fpm -D

# 關閉 php-fpm
killall php-fpm

 

注意:php-fpm.conf 中的 用戶名 及 用戶組 配置爲當前用戶,即  jianbaostaff

 

延伸閱讀:

Mac Pro 開機自啓動 PHP-FPM,Nginx,MySql 等軟件

 

 

參考

http://www.widlabs.com/article/mac-os-x-compile-install-php

http://superuser.com/questions/394219/compiling-php-on-os-x-iconv-works-only-if-forced-to-64-bit

https://segmentfault.com/q/1010000004137098

https://upliu.net/compile-php-with-openssl-on-max-osx-error.html

http://b.liuctic.com/2012/01/build-php-on-lion/

http://www.javashuo.com/article/p-fekfvqci-e.html

全新安裝Mac OSX 開發者環境 同時使用homebrew搭建 PHP,Nginx ,MySQL,Redis,Memcache ... ... (LNMP開發環境)

Mac下安裝LNMP(Nginx+PHP5.6)環境

相關文章
相關標籤/搜索