使用nar-maven-plugin将外部.so库添加到jni项目
问题描述:
我有file.c
,我想将其包含到我的Java应用程序中。 我创建了JNI
模块,并将其与nar-maven-plugin
一起应用于应用程序。使用nar-maven-plugin将外部.so库添加到jni项目
下面是它的配置:
<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项目?
答
看看这里,看看如何处理JNI和共享库:
http://jnicookbook.owsiak.org/recipe-No-023/
你需要做的是你的共享库(JNI)与一个所使用JNI代码链接。然后,你可以为你的代码提供这个库,或者你可以要求用户在系统中安装它(例如通过包)。
与JNI玩得开心
据我所知,在这里没有* .so库,你有另一个* .c文件。这不是很不一样吗? – htshame
这个另一个文件“c/recipeNo023_AnotherFunction.c”被编译为共享库。然后,“c/recipeNo023_HelloWorld.c”链接到这个共享库。你可以看看这里发生了什么:https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo023 – mko
是的,对不起,我的坏。我是C中的一个noob。当我尝试运行第二个命令时,我得到cc:error:无法识别的命令行选项'-install_name' – htshame