歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux環境下編譯CLucene

Linux發行版:Ubuntu 12.04

CLucene版本:CLucene-core-2.3.3.4.tar.gz

1、准備工作:

由於CLucene源碼由CMake工具來構建,所以先安裝CMake工具,在終端中輸入如下指令:
sudo apt-get install cmake
在終端裡進入CLucene源碼目錄,該目錄中包含一個文件CMakeList.txt,cmake工具通過該文件生成CLucene平台相關的頭文件,在終端裡輸入命令:

cmake CMakeList.txt

2、編譯zlib庫

由於CLucene用到了zlib庫,所以先編譯zlib庫,進入src/ext/zlib目錄,編譯該目錄下的所有源文件,生成靜態庫文件libzlib.a
具體生成方法,可以自己寫個Makefile,參考如下:
TARGET=libzlib.a
SRCFILES=adler32.c \
compress.c \
crc32.c \
deflate.c \
gzio.c \
inffast.c \
inflate.c \
inftrees.c \
trees.c \
zutil.c \
CFLAGS=-c
all:
cc $(CFLAGS) $(SRCFILES)
ar -rv $(TARGET) *.o

 

3、編譯CLucene核心庫
目錄src/core包含了CLucene的核心源代碼,我們只編譯src/core目錄下的源文件。
這裡有兩種方法:
第一種,把核心目錄下的所有源文件都編譯到核心靜態庫中去,這種方法比較費時費力。
第二種,只編譯src/core/CLucene目錄下的CLMonolithic.cpp文件,打開這個文件,我們發現內容如下:
#include "CLucene/StdHeader.cpp"
#include "CLucene/debug/error.cpp"
#include "CLucene/analysis/Analyzers.cpp"
#include "CLucene/analysis/AnalysisHeader.cpp"
……
該文件包含了CLucene的所有核心源文件,因此只需編譯這一個文件就夠了,編譯此文件,生成CLMonolithic.o目標文件,再用該目標文件生成靜態庫libCLucene.a
具體編譯命令參考如下:
g++ -g -c -I./src/shared -I./src/core -I./src/ext/zlib -D_REENTRANT -o CLMonolithic.o ./src/core/CLucene/CLMonolithic.cpp
ar -rv libCLucene.a CLMonolithic.o

至此CLucene的核心庫已編譯完成。

 

下面我們編譯CLucene自帶的一個Demo,來測試一下我們剛剛編譯的核心庫
編譯src/demo裡的所有源文件,最後鏈接上之前生成的libzlib.a和libCLucene.a,生成測試Demo,即Main.out可執行程序。
具體編譯命令參考如下:
g++ -g -c -I./src/shared -I./src/core -o IndexFiles.o ./src/demo/IndexFiles.cpp
g++ -g -c -I./src/shared -I./src/core -o SearchFiles.o ./src/demo/SearchFiles.cpp
g++ -g -c -I./src/shared -I./src/core -o Statistics.o ./src/demo/Statistics.cpp
g++ -g -c -I./src/shared -I./src/core -o Main.o ./src/demo/Main.cpp
g++ -o Main.out -pthread -lpthread Main.o \
SearchFiles.o \
IndexFiles.o \
Statistics.o \
libCLucene.a \
./src/ext/zlib/libzlib.a \

運行Main.out,一切OK

文中不管是zlib庫,還是CLucene核心庫,都是采用靜態庫方式編譯的,導致最後生成的測試Demo Main.out很大,足有6.3M,建議在充分了解CLucene源碼後,采用動態庫方式編譯。

由於接觸Linux環境編程時間不長,CLucene也是剛剛接觸,文中所有代碼雖都測試過,但可能還存在錯誤,歡迎批評指正。

Copyright © Linux教程網 All Rights Reserved