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也是刚刚接触,文中所有代码虽都测试过,但可能还存在错误,欢迎批评指正。