嗨:我想使用JNA访问本机库中的某些功能。
1)我如何自省内部库文件(例如.so文件)以查看可用的方法?
2).so文件中可访问的方法与编译这些文件的C代码之间是否存在一对一的映射?
3)JNA是否可以在所有情况下工作,其中唯一的java / native互操作涉及从Java调用本机库(我假设这是JNA的经典用例) - 或者有时需要JNI?
答案 0 :(得分:3)
1)depends.exe在Windows上,objdump
,nm
等。 on * nix variants。
2)大多数共享库都是为C风格的链接而设计的。这通常意味着您可以查找与库中符号相对应的地址,但类型(变量,常量或函数)和签名信息(用于函数)通常不会嵌入库中。
3)JNA使用极少数通用JNI操作来执行其所有魔术:打开共享库,查找符号,读/写内存,调用函数。很少有情况下 使用JNI而不是JNA,至少在处理具有C链接的库时。