使用nar-maven-plugin

时间:2017-06-09 07:06:10

标签: java c maven java-native-interface shared-libraries

我想要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项目中呢?

1 个答案:

答案 0 :(得分:1)

看一看如何处理JNI和共享库:

http://jnicookbook.owsiak.org/recipe-No-023/

您需要做的是将您的共享库(JNI)与JNI代码使用的共享库链接起来。

然后,您可以为此库提供代码,或者您可以要求用户将其安装在系统中(例如通过软件包)。

与JNI玩得开心