我想要file.c
包含在我的Java应用程序中。
我创建了JNI
模块,并将其包含在nar-maven-plugin
的应用程序中。
这是配置:
<plugin>
<groupId>com.github.maven-nar</groupId>
<artifactId>nar-maven-plugin</artifactId>
<version>3.5.2</version>
<extensions>true</extensions>
<configuration>
<libraries>
<library>
<type>jni</type>
<narSystemPackage>my.package.nativelib</narSystemPackage>
</library>
</libraries>
</configuration>
</plugin>
运行mvn clean install
后,会创建libmy-native-lib.so
个文件。
我设法从Java获得C函数,但有一个问题:file.c
使用外部libexternal.so
库(file.c
中包含#include "external.h"
),以及当它从external.h
到达任何函数时,它会因“符号查找错误”而失败。
我尝试使用
static {
System.load("/usr/lib/libexternal.so");
}
和
static {
System.loadLibrary("external");
}
但似乎没有任何效果。
那么如何将外部* .so库添加到JNI项目中呢?
答案 0 :(得分:1)
看一看如何处理JNI和共享库:
http://jnicookbook.owsiak.org/recipe-No-023/
您需要做的是将您的共享库(JNI)与JNI代码使用的共享库链接起来。
然后,您可以为此库提供代码,或者您可以要求用户将其安装在系统中(例如通过软件包)。
与JNI玩得开心