java native access
maven 导 jar 包
// https://mvnrepository.com/artifact/com.sun.jna/jna
compile group: 'com.sun.jna', name: 'jna', version: '3.0.9'
例子
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
/** Simple example of native library declaration and usage. */
public class HelloWorld {
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)
Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
CLibrary.class);
void printf(String format, Object... args);
}
public static void main(String[] args) {
CLibrary.INSTANCE.printf("Hello, World/n");
for (int i=0;i < args.length;i++) {
CLibrary.INSTANCE.printf("Argument %d: %s/n", i, args[i]);
}
}
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'Everything64': ÕҲ»µ½ָ¶¨
说这个错误是找不到dll
用绝对路径
Everything instanceDll = (Everything) Native.loadLibrary("D:\\Documents\\MediaCenter\\Everything-SDK\\dll\\Everything64.dll", Everything.class);
2、在win(dll)和Linux(so)环境下放置位置
在window环境下:
如果只是单独类的编译运行,放在JNA接口同级目录即可。
如果说在IDE中访问,则将DLL放到jdk/bin或jdk/jre/bin目录下即可。
在Linux环境下:将.so放到linux-x86-64目录下,该目录为64位系统所支持的目录,32位的同理。
评论区