http://www.cocoachina.com/applenews/devnews/2013/0523/6262.html
公司的一个新的项目有iOS和android两个版本。其中的数据库是java那边生成的,为了支持全文检索,java的同事使用了Lucene(java端全文检索引擎工具包 http://lucene.apache.org )。
先调查一下在iOS上能不能使用Lucene吧。
在github上找到两个Objective-c版本的Lucene:LuceneKit和S4LuceneLibrary,后者是在前者的基础上实现的。可是他们支持的Lucene版本太低了,试了一下第二个,不能直接使用java生成的Lucene数据。
于是想到有没有c或c++版的Lucene?还真有——Clucene,据说和java版比较兼容。那就试试吧。
下载源代码( http://sourceforge.net/projects/clucene/ ),发现需要使用cmake来编译。
好吧,先下载cmake for mac( http://www.cmake.org/cmake/resources/software.html ),安装。
起初,看Clucene的的安装说明,需要使用命令行,配置各种参数,毫无头绪,好头疼。
再仔细看了看说明,原来cmake还有GUI,安装时没注意。赶紧打开,添加源代码路径,目标路径,配置,生成。结果生成的Xcode项目是针对mac的,iOS没法用。
看来配置的不对,参考github上有人做过的一个项目clucene-iOS,几经周折,终于生成了正确的Xcode项目。
下面就来详细介绍一下生成过程。
第一步,打开在应用程序中的cmake GUI程序,设置好源代码路径,和输出路径,如图:
第二步,点击Configure,在弹出的界面中直接点击Done,如图:
等待cmake配置各种信息,这一过程可能需要几分钟。配置完成如图:
第三步,配置参数,这一步非常重要。
1.由于iOS只支持静态库,所以要勾选BUILD_STATIC_LIBRARIES选项。
2.设置CMAKE_OSX_ARCHITECTURES为armv7或ARCHS_STANDARD_32_BIT(根据Xcode版本可能是:armv6,armv7;armv7,armv7s),因为默认是针对Mac的。
3.设置CMAKE_OSX_SYSTOOT为iOS的sdk,iPhoneSimulator或iPhoneOS
第四步,点击Generate,很快就会在指定的输出目录下生成需要的Xcode项目。
如果生成的Xcode项目还是针对Mac的,可能需要再Configure一次试试。
接下来就是编译clucene-core-static和clucene-shared-static两个静态库了。
打开生成的clucene工程,可能需要调整一下Base SDK和Architectures设置。
scheme选择clucene-core-static,编译,结果有12个警告和4个错误。警告大部分是继承时虚拟函数被隐藏和变量未使用,先不去管它。
错误是“ Variable has incomplete type 'struct stat64' ”。
调查一番,发现这个结构是关于文件的状态信息的。但是iOS使用的是“struct stat”而不是“struct stat64”。而clunene的cmake生成规则可能没有考虑到iOS的情况,导致编译时找不到定义。
解决办法是手动修改src/shared/CLucene目录下的_clucene-config.h文件,将59-60行的stat64改为stat,将64行的fstat64改为fstat。改完之后就可以通过编译了,在bin目录下生成了对应的静态库。