DLL到LIB - 无法使用JNI和System.load调用打开LIB文件

时间:2014-09-15 16:29:52

标签: java c++ visual-studio-2010 dll shared-libraries

我正在使用Visual Studio 2010创建一个DLL文件,并且可以使用以下代码编写好文件:

System.load("c:\\sharedFiles\\dll\\VisualDLL.dll");

现在我需要这个库是静态的,因为我无法在其他机器上安装我在创建DLL时使用的其他库,因此我需要将所有库都放在一个包中。在将相同的代码编译到lib之后,我的应用程序调用以下方法:

System.load("c:\\sharedFiles\\dll\\VisualDLL.lib");

但是创建.LIB后出现以下错误,使用Visual Studio 2010创建一个文件来运行该应用程序:

c:\ sharedFiles \ _dll \ VisualDLL.dll:%1无效的Win32应用程序

java的版本是1.7.09 64位,而Visual Studio则编译为64位机器目标。

发生了什么事?我不能用这种方法加载lib文件?

1 个答案:

答案 0 :(得分:1)

使用外部DLL时,您有一个 import LIB。导入lib是一个存根,您的程序或DLL将在链接到外部DLL时使用它。也就是说,它在编译并将程序或DLL链接到外部库时使用。

静态 LIB略有不同。它不是存根,它带有所需的所有代码。它就像一个Linux存档,你的程序或DLL会直接链接到它。

如果您正在尝试让Java加载静态库VisualDLL.lib,那么那将无法正常工作。


  

现在我需要库是静态的,因为......

不,它不会那样工作。您需要围绕静态lib构建包装器DLL。然后,Java将在需要时加载您的DLL。