我正在使用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文件?答案 0 :(得分:1)
使用外部DLL时,您有一个 import LIB。导入lib是一个存根,您的程序或DLL将在链接到外部DLL时使用它。也就是说,它在编译并将程序或DLL链接到外部库时使用。
静态 LIB略有不同。它不是存根,它带有所需的所有代码。它就像一个Linux存档,你的程序或DLL会直接链接到它。
如果您正在尝试让Java加载静态库VisualDLL.lib,那么那将无法正常工作。
现在我需要库是静态的,因为......
不,它不会那样工作。您需要围绕静态lib构建包装器DLL。然后,Java将在需要时加载您的DLL。