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

时间:2017-02-01 14:55:29

标签: c# c shared-libraries artoolkit 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 means"符号位于文字(代码)部分。"

出现两次的arwCapture与仅出现一次的arwAcceptVideoImage有什么区别。

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

1 个答案:

答案 0 :(得分:1)

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

大概arwCapture()是ac函数,这就是为什么你可以从C#调用它,但是在共享对象中,虽然定义了Java arwAcceptVideoImage()方法,但是在任何地方都没有arwAcceptVideoImage()

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