【问题标题】:NetBeans Library using JNI使用 JNI 的 NetBeans 库
【发布时间】:2010-10-01 05:21:24
【问题描述】:

我能否定义一个在 NetBeans 中使用 JNI 的库?

似乎库定义只允许罐子或文件夹。

在构建应用程序时,如何确保 DLL 遵循 jar 文件?

【问题讨论】:

    标签: netbeans java-native-interface


    【解决方案1】:

    假设您指的是构建 NetBeans 平台应用程序(或模块),那么您可以将 DLL 放在“release/modules/lib/”文件夹中。这是每个平台常见问题解答:

    这里有更多信息:

    如果您问得更笼统,那么我认为大多数人将 DLL 打包到 jar 中,然后在应用程序启动时将其提取到临时位置。例如

    如果这不是您想要的,那么您需要提供更多信息来说明您想要做什么。

    【讨论】:

    • 不是,特指定义可以添加到项目中的Libraries。
    • 关于在 jar 中打包 dll 的掘金很有趣。
    【解决方案2】:

    netbeans 不会自己做,但由于它在幕后使用 ant,所以有一个解决方法。

    您应该在项目目录 (c:\path\to\mynetbeansproject\jni) 中创建一个名为 jni 的子目录,将所有 .dll、.so 和 .jnilib 文件放入其中(本机文件),然后将以下行添加到 @您在项目目录中找到的 987654323@ 文件,就在 </project> 标记之前:

    <target name="-post-compile">
        <copy todir="${dist.dir}/lib">
            <fileset dir="jni" />
        </copy>
    </target>
    

    然后像往常一样将 jar 文件添加到您的项目中。 :)

    您在build.xml 中插入的 sn-p 将确保当您从 netbeans 中调用“Clean and Build”(或从命令行调用 ant ); jvm 将在与加载它们的 .jar 相同的目录中查找 .dll(.so、.jnilib)文件,因此它可以工作。

    请注意,这不会让您的项目在 netbeans 中运行,因为……我不太确定发生了什么,但看起来库路径 (LD_LIBRARY_PATH) 不包含您项目的库,而且我无法从netbeans中更改它。只需将您的本机库放在 mac os x 上的 /Library/Java/Extensions 中,或者将它们存储在 Windows 下的 c:\windows\system32 中。如果您使用 64 位 jvm 运行 64 位 Windows,我不知道;如果您正在运行 linux,您可能知道将它们存放在哪里,但/usr/lib/java 可能是一个不错的选择。

    【讨论】:

      【解决方案3】:

      我在使用 NetBeans 7.0.1 时测试了以下解决方案并且它有效,但我不知道它是否也适用于早期版本。

      该解决方案很简单,并且适用于每个 NetBeans 模块。因此,如果您有一个套件,请不要将其 JNI 文件放入套件项目中,而是将您想要的 JNI 文件放入模块本身中。做:

      1. 找到您想要(或需要或认为)放置 JNI 库(扩展名为 .DLL、.so 和 .jnilib,例如)的 NetBeans 模块项目;
      2. 在项目中,右键单击模块节点,单击属性菜单;
      3. 在 Project Properties 对话框中,单击 Libraries and Wrapped JARs。您必须在那里添加任何外部库。我添加了 RxTX jar 库。添加外部库后,Netbeans Ant 脚本会在您构建解决方案时将目录 your_project_dir/release 中的所有文件/文件夹复制到正确的位置。
      4. 因此,请将您的原生库放在 your_project_dir/release/lib。如果需要,您可以为所需的每个目标平台创建子目录,例如:your_project_dir/release/lib/amd64、your_project_dir/release/lib/sparc32

        要了解更多信息,请阅读: http://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#jni

        问候, marciowb.info

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多