SWIG c ++ Java DLL Windows

时间:2012-01-19 04:15:31

标签: java c++ swig

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

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

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

UnsatisfiedLinkError

- >本机代码库无法加载。有关帮助

,请参阅SWIG Java文档中有关动态链接问题的章节

DLL非常简单。静态链接到运行时库(/ MT)。没有家属,但仍然 得到这个错误。

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

感谢任何帮助。 谢谢

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

从您所描述的内容看起来,在尝试调用其中一个(由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放在适合系统库路径的位置)。