我在使用jna加载dll时遇到问题。虽然我可以在eclipse中调试代码,但是当我导出并将其作为jar文件运行时,我得到一个异常:
java.lang.UnsatisfiedLinkError:无法加载库'SiUSBXp'
当我将它作为jar文件运行时,为什么它找不到我的dll的任何想法?
感谢!!!!
public interface SiUSBXp extends StdCallLibrary {
byte SI_GetNumDevices(IntByReference numdevices);
byte SI_GetProductString( int deviceNum, byte[] productString, int options );
byte SI_Open(IntByReference numdevices);
}
static SiUSBXp INSTANCE;
public static void main(String[] args) {
System.setProperty("jna.library.path","SiUSBXp.dll");
HashMap<String, StdCallFunctionMapper> optionMap = new HashMap<String, StdCallFunctionMapper>();
StdCallFunctionMapper myMapper = new StdCallFunctionMapper();
optionMap.put(Library.OPTION_FUNCTION_MAPPER, myMapper);
INSTANCE = (SiUSBXp) Native.loadLibrary("SiUSBXp", SiUSBXp.class, optionMap);
}
------------------编辑----------------------
dll与jar
位于同一个文件夹中------------------编辑2 ---------------------
我刚尝试在windows xp中运行它并且它可以运行..但它不在Windows 7(64位)中
------------------ EDIT 3 --------------------- 我已经解决了这个问题...这是由于安装了java版本...我将它们全部删除了,然后只安装了x86版本的java ...之后它完美地工作了
答案 0 :(得分:4)
将DLL放入“当前文件夹”或系统变量PATH,或使用-Djna.library.path=(path to the dll)
作为VM切换而不是硬编码。
答案 1 :(得分:0)
我遇到奇怪的问题,jna 3.3.0找不到库,试试jna 3.2.7。此外,除了jna.library.path
之外,它也可以帮助设置java.library.path
。而且我不确定你是否应该将库名放在路径中而不是库所在的文件夹中。尝试将其设置为“。”。