<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践OK]Raspberry pi 的FreeBSD11系统下成功安装swoole扩展。及出现Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Sun, 21 Feb 2016 05:10:11 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	Raspberry Pi在FreeBSD下试图编译swoole扩展出现如下问题：<br/>root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # phpize <br/>Configuring for:<br/>PHP Api Version:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20131106<br/>Zend Module Api No:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20131226<br/>Zend Extension Api No:&nbsp;&nbsp; 220131226<br/>Cannot find autoconf. Please check your autoconf installation and the<br/>$PHP_AUTOCONF environment variable. Then, rerun this script.<br/><br/>解决办法：<br/>pkg install autoconf<br/>pkg install m4<br/><br/>CentOS:<br/>yum install m4 -y<br/>yum install autoconf -y<br/><br/>重新编译：<br/>root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # phpize <br/>root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # ./configure <br/>root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # make &amp;&amp; make install<br/>/usr/local/include/php/ext/pcre/php_pcre.h:29:10: fatal error: &#039;pcre.h&#039; file not found<br/><br/>其实这是由于缺少了pcre开发包所导致的，既然缺少那就装上吧:-)，我是在Debian环境下当然想通过apt-get这个命令解决问题了，不过搜索了网络，只找到了CentOS的yum命令：<br/>yum update<br/>yum install pcre-devel<br/>好吧，我只有依葫芦画瓢，把yum直接改成apt-get，不过apt-get install pcre-devel这步出错了，找不到包，仔细搜索了网络才知道，原来Debian系下不叫这个名字，正确的命令如下：<br/>apt-get update<br/>apt-get install libpcre3 libpcre3-dev<br/>这样折腾一下，然后再pecl install apc一次，好了，成功安装了！<br/>FreeBSD呢？ 试一试：pkg install&nbsp;&nbsp;pcre-devel&nbsp;&nbsp;发现没有于是再度下：pkg install libpcre3 libpcre3-dev ，也没有。<br/>看下pcre有没有最新，再看下：<br/>root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # pkg install pcre<br/>Updating rpi repository catalogue...<br/>rpi repository is up-to-date.<br/>All repositories are up-to-date.<br/>Checking integrity... done (0 conflicting)<br/>The most recent version of packages are already installed<br/>于是按：mac 10.10.3下安装Swoole扩展，提示pcre.h文件找不到：https://segmentfault.com/q/1010000002886696<br/><br/>正如@韩天峰 所说，你需要pcre扩展库文件,按照swoole的默认安装，程序会在/usr/local以及php include_path里面取搜索，事实上在安装pcre的时候你已经安装了这个库文件。<br/><br/>大概的位置/opt/local/include/pcre.h，所以你需要做一个软链<br/>sudo ln -s /opt/local/include/pcre.h /usr/include/<br/><br/>如果没在这个位置你就搜索一下find / -name pcre,然后软链过去<br/><br/><br/>真正实践OK的办法是：<br/>./configure --with-php-config=/usr/local/bin/php-config&nbsp;&nbsp;//这样也是不行的。<br/>root@rpi2:/ # find . -name &quot;pcre.h&quot;<br/>./usr/local/include/pcre.h<br/>这行是关键：<br/>ln -s /usr/local/include/pcre.h&nbsp;&nbsp; /usr/include/pcre.h<br/>就可以编译通过了，并生成了swoole.so，如下：<br/>----------------------------------------------------------------------<br/><br/>Build complete.<br/>Don&#039;t forget to run &#039;make test&#039;.<br/><br/>Installing shared extensions:&nbsp;&nbsp;&nbsp;&nbsp; /usr/local/lib/php/20131226-zts/<br/>root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # ls /usr/local/lib/php/20131226-zts/<br/>swoole.so<br/><br/><br/>root@rpi2:/usr/local/etc # cp php.ini-development php.ini<br/>extension=swoole.so<br/>root@rpi2:/usr/local/etc # php -m<br/>[PHP Modules]<br/>swoole<br/><br/>试一下程序：<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
$serv = new swoole_http_server(&quot;127.0.0.1&quot;, 9502);
 
$serv-&gt;on(&#039;Request&#039;, function($request, $response) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($request-&gt;get);
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($request-&gt;post);
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($request-&gt;cookie);
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($request-&gt;files);
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($request-&gt;header);
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($request-&gt;server);
 
&nbsp;&nbsp;&nbsp;&nbsp;$response-&gt;cookie(&quot;User&quot;, &quot;Swoole&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;$response-&gt;header(&quot;X-Server&quot;, &quot;Swoole&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;$response-&gt;end(&quot;&lt;h1&gt;Hello Swoole!&lt;/h1&gt;&quot;);
&#125;);
 
$serv-&gt;start();

</textarea><br/>httpServer.php: new file: 17 lines, 451 characters.<br/>root@rpi2:~/php # php httpServer.php<br/>[2016-02-18 06:46:50 @13407.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swSocket_set_buffer_size(:333): setsockopt(3, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].<br/>[2016-02-18 06:46:50 @13407.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swSocket_set_buffer_size(:333): setsockopt(4, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].<br/>[2016-02-18 06:46:50 @13407.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swSocket_set_buffer_size(:333): setsockopt(5, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].<br/>[2016-02-18 06:46:50 @13407.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swSocket_set_buffer_size(:333): setsockopt(6, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].<br/>[2016-02-18 06:46:50 @13407.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swSocket_set_buffer_size(:333): setsockopt(7, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].<br/>[2016-02-18 06:46:50 @13407.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swSocket_set_buffer_size(:333): setsockopt(8, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].<br/>[2016-02-18 06:46:50 @13407.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swSocket_set_buffer_size(:333): setsockopt(9, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].<br/>[2016-02-18 06:46:50 @13407.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swSocket_set_buffer_size(:333): setsockopt(10, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].<br/><br/><br/>root@rpi2:~/php # netstat<br/>Active Internet connections<br/>Proto Recv-Q Send-Q Local Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foreign Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(state)<br/>tcp4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 localhost.9502&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost.24050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLOSE_WAI<br/><br/>root@rpi2:~/php # telnet localhost 9502<br/>Trying 127.0.0.1...<br/>Connected to localhost.<br/>Escape character is &#039;^]&#039;.<br/><br/>root@rpi2:~/php # curl &quot;http://127.0.0.1:9502&quot;<br/>出现：<br/>php httpServer.php<br/>[2016-02-18 06:55:17 #13407.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swServer_signal_hanlder: Fatal Error: manager process exit. status=0, signal=0.<br/>[2016-02-18 06:55:23 $13408.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swManager_check_exit_status: worker#2 abnormal exit, status=0, signal=11<br/>[2016-02-18 06:55:31 $13408.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swManager_check_exit_status: worker#1 abnormal exit, status=0, signal=11<br/>[2016-02-18 06:55:38 $13408.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11<br/>[2016-02-18 06:55:42 $13408.0]&nbsp;&nbsp;WARN&nbsp;&nbsp;&nbsp;&nbsp;swManager_check_exit_status: worker#2 abnormal exit, status=0, signal=11<br/>——————————————缺少安装包来自———————————————————————<br/>运行/usr/local/webserver/php/bin/phpize时出现：<br/>Configuring for:<br/>PHP Api Version:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20041225<br/>Zend Module Api No:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20060613<br/>Zend Extension Api No:&nbsp;&nbsp; 220060519<br/>Cannot find autoconf. Please check your autoconf installation and the<br/>$PHP_AUTOCONF environment variable. Then, rerun this script.<br/>根据网上的解决办法是：<br/><br/># cd /usr/src<br/># wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz<br/># tar -zvxf m4-1.4.9.tar.gz<br/># cd m4-1.4.9/<br/># ./configure &amp;&amp; make &amp;&amp; make install<br/># cd ../<br/># wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz<br/># tar -zvxf autoconf-2.62.tar.gz<br/># cd autoconf-2.62/<br/># ./configure &amp;&amp; make &amp;&amp; make install<br/>更简单的办法<br/># yum install m4<br/># yum install autoconf<br/><br/>来自：http://blog.csdn.net/21aspnet/article/details/7471574<br/><br/><br/>问题二：swoole error: use of undeclared identifier &#039;SIOCGIFHWADDR&#039;:<br/>http://group.swoole.com/question/106871<br/>替换：https://github.com/swoole/swoole-src/blob/9eaaf1382c7578933dac3fad143033d1bd8c085f/swoole.c<br/><br/>问题三：<br/>https://github.com/swoole/swoole-src/issues/1347<br/>swoole-src-1.9.19/src/network/Port.c:712:41: error: invalid operands to binary expression (&#039;time_t&#039;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(aka &#039;long&#039;) and &#039;char *(*)(int, int)&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (date_format &amp;&amp; mktime(&amp;tm3) - timezone &gt;= file_mtime)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~~~~~~~~~~~~ ^ ~~~~~~~~<br/>1 error generated.<br/>*** Error code 1<br/>修复：https://github.com/swoole/swoole-src/commit/607256a4b3796c1c0ade648379b50fdf815947a5<br/>代码：https://github.com/swoole/swoole-src/blob/607256a4b3796c1c0ade648379b50fdf815947a5/src/network/Port.c<br/><br/>编译成功@11.1-RELEASE FreeBSD 11.1-RELEASE：<br/>creating ./swoole.la<br/>(cd ./.libs &amp;&amp; rm -f swoole.la &amp;&amp; ln -s ../swoole.la swoole.la)<br/>/bin/sh /tmp/swoole-src-1.9.19/libtool --mode=install cp ./swoole.la /tmp/swoole-src-1.9.19/modules<br/>cp ./.libs/swoole.so /tmp/swoole-src-1.9.19/modules/swoole.so<br/>cp ./.libs/swoole.lai /tmp/swoole-src-1.9.19/modules/swoole.la<br/><br/><br/>php -i &#124; grep extension<br/>extension_dir =&gt; /usr/local/php/ext/ =&gt; /usr/local/php/ext/<br/>cp -rf /tmp/swoole-src-1.9.19/modules/swoole.so /usr/local/php/ext/<br/>vi /usr/local/etc/php.ini<br/>extension=swoole.so<br/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]Raspberry pi 的FreeBSD11系统下成功安装swoole扩展。及出现Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>