在本机库中查找公开的方法以通过JNA / JNI进行访问?

时间:2013-01-04 16:53:54

标签: java linux java-native-interface native jna

嗨:我想使用JNA访问本机库中的某些功能。

1)我如何自省内部库文件(例如.so文件)以查看可用的方法?

2).so文件中可访问的方法与编译这些文件的C代码之间是否存在一对一的映射?

3)JNA是否可以在所有情况下工作,其中唯一的java / native互操作涉及从Java调用本机库(我假设这是JNA的经典用例) - 或者有时需要JNI?

1 个答案:

答案 0 :(得分:3)

1)depends.exe在Windows上,objdumpnm等。 on * nix variants。

2)大多数共享库都是为C风格的链接而设计的。这通常意味着您可以查找与库中符号相对应的地址,但类型(变量,常量或函数)和签名信息(用于函数)通常不会嵌入库中。

3)JNA使用极少数通用JNI操作来执行其所有魔术:打开共享库,查找符号,读/写内存,调用函数。很少有情况下 使用JNI而不是JNA,至少在处理具有C链接的库时。