【问题标题】:SWIG c++ Java DLL WindowsSWIG c++ Java DLL Windows
【发布时间】:2012-01-19 04:15:31
【问题描述】:

我的问题:为 c++ DLL 创建一个 java 包装器。 我知道,有很多关于这个问题的文章,但到目前为止我还没有解决方案。 然后问题: 我在 C:\java\jdk 的 Windows 7、64 位上安装了 java 1.6 up 29 32-bit。 该路径是路径变量的一部分(在任何地方打开 cmdline,我总是可以调用 javac...)

我有最新的 swig,它成功地为我的 DLL 创建了 python 和 perl 包装器。

当我使用 VS2008 构建 java/class 示例时 - 完成时没有错误 - 并尝试运行 runme.java 我得到错误:

UnsatisfiedLinkError

-> 本机代码库加载失败。请参阅 SWIG Java 文档中有关动态链接问题的章节以获取帮助

DLL 非常简单。静态链接到运行时库 (/MT)。没有依赖,但仍然 收到此错误。

请注意:swig 示例不起作用。安装了 Java。 tcl 示例也不起作用。 tcl 8.4 已安装(类似错误)。

感谢任何帮助。 谢谢

【问题讨论】:

    标签: java c++ swig


    【解决方案1】:

    你的类已经编译成功,原生库也编译成功。问题是 Java 代码需要在运行时加载您使用 Visual Studio 生成的共享对象。

    在运行课程时尝试传递-Djava.library.path=<directory containing your DLL>

    【讨论】:

    • 您好,谢谢您的回答。我是java新手。所有 .java 、所有 .class 和 dll 都位于同一目录中。我从命令行运行所有内容,并尝试了一个简单的 java 类加载另一个 dll;只需加载(loadLibrary(dllname))。这行得通。它必须以某种方式与 swig 相关,因为 swig 自己的样本失败了。
    • @user947604:SWIG 生成两段代码:一个 C++ 文件和一个 Java 文件。您将 C++ 文件编译为 DLL。然后将 Java 文件编译为 .class。最后,您运行 Java 类 - 但您构建的 DLL 必须在 java.library.path 中。
    • java jdk 安装在 c:\java\jdk。你能告诉如何找出这条路径的位置吗?
    • @user947604 你设置了java.library.path。当你在包含 VS 编译的 DLL 和你的 Java .class 文件的目录中时,尝试运行 java -Djava.library.path=. MyClass
    • 这样做了。 java -Djava.library.path=。 MyClass 导致相同的错误:“找不到依赖库”。 java -Djava.library.path=.MyClass(没有空格)会导致这个错误:usage java.... 希望我做对了。 MyClass 包含一个主要的静态加载库..?
    【解决方案2】:

    从您所描述的内容看来,您似乎在尝试调用(由 SWIG 生成的)JNI 方法之一之前没有加载您在 Java 中编译的 DLL。

    我通常使用类似的东西:

    %pragma(java) jniclasscode=%{
      static {
        try {
            System.loadLibrary("module");
        } catch (UnsatisfiedLinkError e) {
          System.err.println("Native code library failed to load. \n" + e);
          System.exit(1);
        }
      }
    %}
    

    在我的 SWIG 接口文件中,使 DLL 在运行时由 Java 代码自动加载。

    (您需要确保将 DLL 放置在与系统上的库路径相关的适当位置)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多