【问题标题】:Finding exposed methods in native libraries to access over JNA / JNI?在本机库中查找公开的方法以通过 JNA/JNI 访问?
【发布时间】:2013-01-04 16:53:53
【问题描述】:

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

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

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

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

【问题讨论】:

  • 啊刚刚找到了部分答案:“nm”命令将执行此操作,这是使用的“最佳”编译器标志。但是,不清楚这些论点是什么。
  • 除非库是用调试信息编译的,否则你不会找到任何方法签名,只有名称。

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


【解决方案1】:

1) Windows 上的depends.exeobjdumpnm 等。在 *nix 变体上。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多