nm:共享库符号出现两次或一次



我有一个共享库(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 的意思是"符号在文本(代码)部分"。

arwCapture 出现两次和 arwAcceptVideoImage 只出现一次有什么区别。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新