使用 nar-maven-plugin 将外部 .so 库添加到 jni 项目
Add external .so library to jni project with nar-maven-plugin
我有 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
到达任何函数时,它会失败并返回 "symbol lookup error".
我尝试使用
static {
System.load("/usr/lib/libexternal.so");
}
和
static {
System.loadLibrary("external");
}
但似乎没有任何效果。
那么如何将外部 *.so 库添加到 JNI 项目中呢?
在这里看看如何处理 JNI 和共享库:
http://jnicookbook.owsiak.org/recipe-No-023/
您需要做的是 link 您的共享库 (JNI) 与 JNI 代码使用的共享库。
然后,您可以为该库提供您的代码,或者您可以要求用户将其安装在系统中(例如通过软件包)。
玩得开心 JNI
我有 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
到达任何函数时,它会失败并返回 "symbol lookup error".
我尝试使用
static {
System.load("/usr/lib/libexternal.so");
}
和
static {
System.loadLibrary("external");
}
但似乎没有任何效果。
那么如何将外部 *.so 库添加到 JNI 项目中呢?
在这里看看如何处理 JNI 和共享库:
http://jnicookbook.owsiak.org/recipe-No-023/
您需要做的是 link 您的共享库 (JNI) 与 JNI 代码使用的共享库。
然后,您可以为该库提供您的代码,或者您可以要求用户将其安装在系统中(例如通过软件包)。
玩得开心 JNI