在iOS上使用Clucene——編譯靜態庫

發佈於:2013-05-23 10:08閱讀數:1197

來自會員chenxin的分享: 公司的一個新的項目有iOS和android兩個版本。其中的數據庫是java那邊生成的,爲了支持全文檢索,java的同事使用了Lucene(java端全文檢索引擎工具包 http://lucene.apache.org )

 來自會員chenxin的分享:   

公司的一個新的項目有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目錄下生成了對應的靜態庫。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章