我有一个共享库(libARWrapper.so),其中包含以下两个条目,使用nm(nm -D --defined-only libARWrapper.so)显示



00075854 T Java_org_artoolkit_ar_base_NativeInterface_arwAcceptVideoImage
00074d54 T Java_org_artoolkit_ar_base_NativeInterface_arwCapture
...
00072d54 T arwCapture


我知道T means“符号在文本(代码)部分中。”

两次出现的arwCapture和一次出现的arwAcceptVideoImage之间有什么区别?

我可以从C#DllImport调用arwCapture,但不能从arwAcceptVideoImage调用。
在org.artoolkit.ar.bash.NativeInterface下,还有许多其他功能与arwCapture相同,我可以使用OK。
其他(Java)代码能够通过NDK调用所有函数。

最佳答案

nm发布的输出中,没有证据表明您陈述了什么(arwCapture()不会出现两次)。一个是JNI函数,它肯定是在某个时候调用arwCapture()的包装器。

大概arwCapture()是一个c函数,这就是为什么您可以从C#调用它的原因,但是在共享库中,尽管定义了Java arwAcceptVideoImage()方法,但在任何地方都没有arwAcceptVideoImage()

如果此共享库旨在用作JNI对象,则应避免使用Java以外的其他语言来调用它。而是找到原始库并使用它。

10-07 12:04