我有一个共享库( 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调用所有函数。
答案 0 :(得分:1)
在nm
的发布结果中,没有证据表明您声明的内容( arwCapture()
未出现两次)。一个是JNI函数,它肯定是一个在某个时刻调用arwCapture()
的包装器。
大概arwCapture()
是ac函数,这就是为什么你可以从C#调用它,但是在共享对象中,虽然定义了Java arwAcceptVideoImage()
方法,但是在任何地方都没有arwAcceptVideoImage()
。
如果此共享对象旨在作为JNI对象,则应避免使用其他语言而不是Java来调用它。而是找到原始库并使用它。