java 运行crf_如何编译CRF++

下载源码包,解压

编译C++ bin文件

./configure

make

sudo make install //注意,mac环境下需要sudo,而不是su

编译完成生成crf_learn和crf_test两个bin文件,可以使用它们来训练模型和测试了。

为了在java里面能调用c++ so文件,需要使用swig命令将so转换成支持JNI调用的格式。如果没安装swig命令,需要首先安装。

cd CRF++-0.58

cd swig/

make

cd ../java

echo $JAVA_HOME 查看java include目录,如 /usr/java/jdk1.8.0_45/include/

vi Makefile 将INCLUDE改写成/usr/java/jdk1.8.0_45/include/

make

tips: 如果提示jni_md.h这个文件找不到;我们执行下面的命令拷贝一份:

sudo cp /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include/darwin/jni_md.h /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include

cd到swig目录,执行make命令;再进入解压路径中的java目录,再次执行make命令。这样java目录中就会生成JNI所需要的文件,其中有libCRFPP.so链接库和CRFPP.jar包。

在mac下和Linux下分别通过下面方式进行加载。在Linux下需要加载libcrfpp.so.0和libCRFPP.so两个so,libcrfpp.so.0在/usr/local/lib下,是一个指向libcrfpp.so.0.0.0的软链接,所以可以拷贝libcrfpp.so.0.0.0,重命名为libcrfpp.so.0在工程里加载,或者直接拷贝libcrfpp.so.0(拷贝软链接相当于拷贝指向的文件并重命名)。

if (OS.contains("mac")) {

String libDir = resourceLoader.getPath("libCRFPP.dylib");

System.load(libDir);

System.out.println("load libCRFPP.dylib successfuly");

} else {

String libDir = resourceLoader.getPath("libCRFPP.so");

// 必须先加载.so.0

String so0Path = libDir.substring(0, libDir.lastIndexOf("lib")) + "libcrfpp.so.0";

System.load(so0Path);

System.load(libDir);

System.out.println("load libCRFPP.so successfuly");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值