2012-01-19 41 views
2

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

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

当我球泡与VS2008的Java /类样本 - 它完成无误 - 并尝试运行runme.java我得到的错误:

UnsatisfiedLinkError

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

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

请注意:swig示例不起作用。 Java安装。此外,tcl示例不起作用。 tcl 8.4安装(类似错误)。

任何帮助表示赞赏。 谢谢

+0

DLL是32位还是64位? –

回答

1

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

尝试通过-Djava.library.path=<directory containing your DLL>当您运行该类。

+0

你好,谢谢你的回答。我是java新手。所有.java,所有.class和dll都位于同一个目录中。我从命令行运行所有,只是尝试一个简单的Java类加载另一个DLL;只是加载(loadLibrary(dllname))。这工作。它必须以某种方式与swig自己的样本失败有关。 – user947604

+0

@ user947604:SWIG生成两段代码:一个C++文件和一个Java文件。您将C++文件编译为一个DLL。然后,将Java文件编译成.class。最后,你运行Java类 - 但是你建立的DLL必须在'java.library.path'中。 – Borealid

+0

java jdk安装在c:\ java \ jdk中。你能告诉如何找出这条路径的位置吗? – user947604

0

从你所描述的外观看来,你似乎没有加载在Java中编译的DLL,然后试图调用其中一个(由SWIG生成的)JNI方法。

我通常使用类似:

%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); 
    } 
    } 
%} 

在我痛饮接口文件,导致要由Java代码在运行时自动加载的DLL。

(您需要确保将DLL放在适合系统库路径的地方)。