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, который появляется только один раз.
Я могу вызвать arwCapture из C# DllImport, но не arwAcceptVideoImage.
Есть также много других функций, похожих на arwCapture, все под org.artoolkit.ar.bash.NativeInterface, которые я могу использовать OK.
Другой (Java) код способен вызывать все функции через NDK.
1 ответ
В опубликованном выводе от nm
нет никаких доказательств того, что вы заявляете (arwCapture()
не появляется дважды). Одним из них является функция JNI, которая, безусловно, является оберткой, которая вызывает arwCapture()
в какой-то момент.
предположительно arwCapture()
является функцией переменного тока, поэтому вы можете вызывать ее из C#, но в общем объекте нет arwAcceptVideoImage()
где угодно, хотя есть Java arwAcceptVideoImage()
метод определен.
Если этот общий объект задуман как объект JNI, вам следует избегать вызова его с другого языка, кроме Java. Вместо этого найдите оригинальную библиотеку и используйте ее.