java - 使用 nar-maven-plugin 将外部 .so 库添加到 jni 项目

标签 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 项目中呢?

最佳答案

在这里查看如何处理 JNI 和共享库:

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

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

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

享受 JNI 的乐趣

关于java - 使用 nar-maven-plugin 将外部 .so 库添加到 jni 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44451435/

相关文章:

java - 更改用作 Map 键的对象

java - 如何在多个 Activity 中保持蓝牙连接?

java - Java中如何查找类型变量的类?

java - 为什么相同的代码在 Java 中的工作方式不同?

java - 进行 Maven 构建时 Jackson 依赖版本被覆盖

java - pom.xml 中缺少 Artifact com.oracle :ojdbc6:jar:11. 2.0

java - 未找到元素异常 : HTMLUnit - Search By ID

c - strtok 无法标记化?

c - 结构指针上的前/后增量运算符

eclipse - 如何避免在eclipse中点击三下进入src/main/webapp?