pecl 升级 sphinx 到新版

转载请注明出处:[Michael`s blog] http://www.toplee.com/blog/1385.html

用pecl upgrade sphinx 命令 可以方便的完成php中sphinx模块的升级,但是这并不表示能够sphinx模块会自动增加官方描述里面的那些新特性,比如1.0.1版本里面增加了 setSelect()方法,1.0.3增加了open(), close()等方法,这些方法并不是通过 pecl upgrade就能得到的,原因是sphinx模块编译的时候需要调用的库 libsphinxclient 还需要升级更新,它们默认存在于 /usr/local/lib目录下,包括 libsphinxclient.so, libsphinxclient.a 等文件,如何升级这些库呢?

记得一定要使用和您sphinx版本一致的libsphinxclient,否则容易出问题的,至少不能高于,我就遇到了类似如下的错误提示:

client version is higher than daemon version (client is v.1.23, daemon is v.1.22)

升级的方法是用sphinx的源代码来完成编译升级,进入到sphinx源代码目录下的 api/libsphinxclient 目录,然后执行下面的命令

#sh ./buildconf.sh (通常这个是必须的,因为不同的操作系统环境)
#./configure
#make
#make install

顺利的话,这就ok了,然后您就可以pecl upgrade sphinx 后完成全部升级了。 如果运气不好,在上面make的过程中,可能出现若干错误,遇到不同的错误,仔细看错误提示,大部分都是可以自己解决的,比如,我遇到了如下的错误:

cc -g -O2 -o test test.o  .libs/libsphinxclient.a
.libs/libsphinxclient.a(sphinxclient.o)(.text+0x503): In function `set_error':
/root/packages/sphinx-1.10-beta/api/libsphinxclient/sphinxclient.c:359: undefined reference to `_vsnprintf'
*** Error code 1
cc -g -O2 -o test test.o  .libs/libsphinxclient.a.libs/libsphinxclient.a(sphinxclient.o)(.text+0x503): In function `set_error':/root/packages/sphinx-1.10-beta/api/libsphinxclient/sphinxclient.c:359: undefined reference to `_vsnprintf'*** Error code 1

这个问题解决起来很简单,只需要vi libsphinxclient.c 文件,把里面的 #define vsnprintf _vsnprintf 注释掉或者删掉就可以了,其他的问题,可以慢慢的针对具体问题具体处理。

好了,问题就说到这里了,sphinx是个不错的东东,中文方面,需要下载和安装中文分词的模块来实现,祝您使用愉快! :)

Category: Linux / BSD, PHP / Zend
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
No Responses

Leave a Reply

Your email address will not be published. Required fields are marked *

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image