PHP-CPP,Web
A C++ library for developing PHP extensions | PHP-CPP

Mac 编译&安装 PHP-CPP

What is PHP-CPP?

A C++ library for developing PHP extensions. It offers a collection of well documented and easy-to-use classes that can be used and extended to build native extensions for PHP.

Why PHP-CPP?

This C++ library makes building PHP extensions fun. Extensions built on top of PHP-CPP are easy to understand and simple to maintain, and your code looks great - and it gives a huge boost to your application!

官网

http://www.php-cpp.com


------------------


一:更新gcc

更新GCC是非常有必要的特别是你在安装了xcode的情况下,更新的原因是要支持C++11因为最新的PHPCPP里用了很多C++11的特性。更新方法非常简单打开终端运行如下命令:

brew search gcc #查找gcc源
brew install gcc@4.9 #更新对应版本

首先你可以先查找gcc的源,看看版本。我这里是更新的4.9。更新时间很长容易卡在make bootstrap。这里不用管,只需要等待就好。


更新完毕后的位置:

/usr/local/Cellar/gcc@4.9/4.9.4_1: 1,181 files, 214.5MB, built in 82 minutes 5 seconds

更新完后会提示所在位置,在这里管不管都行。


二:安装gcc

简单的来说,你更新好了以后并不代表可以用,因为存在一个多版本gcc共存这个问题,要想让mac用你最新的gcc你可以这样操作。

打开终端输入:vim ~/.bash_profile

没有用过vim的也不要怕,直接把下面的代码ctrl+v粘贴到终端。

alias gcc="gcc-4.9"
alias g++="g++-4.9"
alias cc="gcc-4.9"
alias c++="c++-4.9"

粘贴完毕之后按下esc键。这个时候是让你输入指令的,而并非编辑文本。按下之后你按下 shift 和 键。这个时候会在终端最底部出现一个 符号。然后就可以输入命令了。直接输入wq按下回车。就可以退出和保存你的代码了。

:wq   将缓冲区内的资料写入磁盘中,并离开vi。

然后退回终端后输入:source ~/.bash_profile 这条指令是让你刚才设置的环境变量生效(不用重启)。

终端输入:gcc -v 看看效果吧。


三:下载php源码

http://www.iwonmo.com/archives/1311.html


源码也可以去php的官方下载,上述地址里也有官方地址。但是建议你用我的百度网盘,因为官网速度很恐怖。


四:下载phpcpp源码

$ git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP.git


上述这条指令就可以phpcpp代码下载下来了。位置在:电脑-macintosh hd -用户 - (你自己的登陆名)-php-cpp


这里的PHP-CPP就是源码文件夹,我们要修改几个地方。

1、删除zend这个文件夹。

2、还记得下载的php源码吧。源码包里有一个zend文件夹,拖过来放到php-cpp里。

3、注意你下载的php版本,我给出的是7.0以上的。所以你下载的phpcpp也要是兼容7.0以上的,也就是最新代码就行。

4、修改makefile文件,这里很简单,修改两处地方:

    4.1、官方给出的地方:

LINKER_FLAGS=-shared 

改为 

LINKER_FLAGS=-shared -undefined dynamic_lookup

    4.2、官方没有给出的地方:

-soname

改为

-install_name

    因为Mac OS下的编译器Clang不支持链接器选项-soname。


到此为止基本上都可以了。


五、make

打开你的终端直接输入:cd php-cpp 进入phpcpp源码目录。然后输入:make 编译。最后会出现如下的显示:

mkdir -p shared/common

mkdir -p shared/zend

c++ -Wall -c -std=c++11 -fvisibility=hidden -DBUILDING_PHPCPP -Wno-write-strings -MD -g -fpic -o shared/common/modifiers.o common/modifiers.cpp

c++ -Wall -c -std=c++11 -fvisibility=hidden -DBUILDING_PHPCPP -Wno-write-strings -MD -g -fpic -o shared/common/streambuf.o common/streambuf.cpp

c++ -shared -undefined dynamic_lookup -g `php-config --ldflags` -Wl,-install_name,libphpcpp.so.2.0 -o libphpcpp.so.2.0.0 shared/common/modifiers.o shared/common/streambuf.o 

ld: warning: directory not found for option '-L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.Internal.sdk/usr/lib'

mkdir -p static/common

mkdir -p static/zend

c++ -Wall -c -std=c++11 -fvisibility=hidden -DBUILDING_PHPCPP -Wno-write-strings -MD -g  -o static/common/modifiers.o common/modifiers.cpp

c++ -Wall -c -std=c++11 -fvisibility=hidden -DBUILDING_PHPCPP -Wno-write-strings -MD -g  -o static/common/streambuf.o common/streambuf.cpp

ar rcs libphpcpp.a.2.0.0 static/common/modifiers.o static/common/streambuf.o 


Build complete.


可以看到组建完成。


六、安装

sudo make install

make指令输入完成,并且编译完成后。直接输入上述指令。


七、组建hello world

http://www.php-cpp.com/EmptyExtension.zip

上述地址是官方提供的一个基础的插件下载地址。如果你在编译也就是make的时候出现

thread_local thread-local storage is not supported for the curren 错误。那你可以更新你的mac版本就可以了,这句话的意思是TLS已经禁用。网上说更新下MAC版本就好了。我更新了一下mac osx 版本,奇迹的好了。


注意你git的php-cpp源码里有一个空的例子目录为下:php-cpp/examples/emptyextension。cd命令切换到进去,然后直接make也可以得到一个基础的插件。