嗨:我想用JNA来访问本地库中的一些函数。
1)我如何反思本机库文件(例如.so文件),看看有什么方法可用?
2)在.so文件中可访问的方法和为编译这些文件而构build的C代码之间是否存在一对一映射?
3)JNA是否可以在所有只有java / native互操作涉及从Java调用本机库的情况下工作(我认为这是JNA的经典用例),还是有时需要JNI?
1)windows上的depends.exe , objdump
, nm
等。 在* nix变种。
2)大多数共享库都是为C风格的链接设计的。 这通常意味着您可以查找与库中符号相对应的地址,但类型(变量,常量或函数)和签名信息(函数)通常不会嵌入到库中。
3)JNA使用几个通用的JNI操作来执行所有的魔术:打开共享库,查找符号,读/写内存,调用函数。 有很少的情况下,你将不得不使用JNI而不是JNA,至少在处理C链接库的时候。