Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在本机库中查找通过JNA/JNI访问的公开方法?_Java_Linux_Java Native Interface_Native_Jna - Fatal编程技术网

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

Java 在本机库中查找通过JNA/JNI访问的公开方法?,java,linux,java-native-interface,native,jna,Java,Linux,Java Native Interface,Native,Jna,嗨:我想使用JNA访问本机库中的一些函数 1) 如何内省本机库文件(.so文件,例如)以查看可用的方法 2) 在.so文件中可访问的方法与编译这些文件的C代码之间是否存在一一映射 3) JNA是否需要在所有情况下工作,其中唯一的java/本机互操作涉及从java调用本机库(我假设这是JNA的经典用例)——或者有时需要JNI来代替?1)在windows上,objdump,nm,等等*nix变体上 2) 大多数共享库都是为C型链接设计的。这通常意味着您可以在库中查找与符号对应的地址,但类型(变量、常

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

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

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

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

1)在windows上,
objdump
nm
,等等*nix变体上

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


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

Ah刚刚找到了部分答案:“nm”命令可以做到这一点,因为使用了“最佳”编译器标志。但是,不清楚参数是什么。除非使用调试信息编译库,否则您将找不到任何方法签名,只有名称。