1

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

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

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

3) JNA 是否保证在唯一的 java/native 互操作涉及从 Java 调用本地库的所有情况下工作(我认为这是 JNA 的经典用例)——或者有时需要 JNI?

4

1 回答 1

3

1) Windows 上的depends.exeobjdump , , nm, 等。在 *nix 变体上。

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

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

于 2013-01-04T20:01:01.130 回答