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. Вместо этого найдите оригинальную библиотеку и используйте ее.

Другие вопросы по тегам