jni踩坑填坑

xiaoxiao2021-02-27  446

因为项目中有用C语言处理的内容,所以要使用jni。首先建立简单的jni接口。之前的文章里面已经写了很多,在此就不再赘述。点击打开链接。不同的是我们将dll文件放在项目里面。需要将java1.7里面的选项配置下。

坑一:C代码指定包名类名,其他类不可用。

即使同样的java native代码,因为没有C语言的路径指定,会报错如下:

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.zky.cw.web.util.CPHashUtil.calculateSimHash([B)Ljava/lang/String; C语言中需要修改的地方再次,将.h文件换成你需要使用类文件所生成的。替换之后,jni文件可能会报错,把<>换成“”。并且把原本.h文件中有的类添加到新的.h文件。 坑二:C语言配置文件导入加载问题。 我们发现,项目里新加载的jni文件已经可以用java application跑起来了。但是,当我们将整个项目用tomcat运行的时候,又报错了。 2017-05-03 14:07:38 c:\users\dell\desktop\哈希文件\simhash-v2.0\simhash\simhash\cppjieba\DictTrie.hpp:139 FATAL exp: [ifs.is_open()] false. open .\dict\jieba.dict.utf8 failed. 前面的地址,本机上找不到位置,后面是一个文件打不开的错误。我们找到了这个文件。 这个dict已经放进了项目里面了,但是还是会报错。 后来才知道,这个是tomcat的原因。我们需要将项目打成war包,放在tomcat/webapps下面,将dict目录放在bin目录下,以及dll文件最好也放在bin目录下。并且在C中的对dict引用的地址要写成相对地址。然后运行war包,就可以跑起来了。

转载请注明原文地址: https://www.6miu.com/read-1183.html

最新回复(0)