Иногда возникает ошибка «Не найдена реализация для native ….»

#android #java-native-interface

#Android #java-native-interface

Вопрос:

Предположительно, это не тот случай, который обсуждался здесь раньше.

Мы используем функции CAN, реализованные с использованием JNI.

Я только вчера обнаружил эту ошибку. Очень редко ошибка «Не найдена реализация для native» возникает, когда я пытаюсь загрузить библиотеку CAN и запустить в ней функцию.

Как только я перезагружаю систему, ошибка исчезает и снова работает.

Код JNI написан на C, а не на C .

Любая помощь будет оценена!!!!

Журнал ошибок :

 D/dalvikvm( 1514): No JNI_OnLoad found in /system/lib/libFlexCAN.so 0x41945b10, skipping init
W/dalvikvm( 1514): No implementation found for native Lcommunication/flexcan/core/Connection;.na_openPort:(I)I
E/Exception( 1514): java.lang.UnsatisfiedLinkError: Native method not found: communication.flexcan.core.Connection.na_openPort:(I)I
E/Exception( 1514):  at communication.flexcan.core.Connection.na_openPort(Native Method)
E/Exception( 1514):  at communication.flexcan.core.Connection.access$0(Connection.java:117)
E/Exception( 1514):  at communication.flexcan.core.Connection$ReceiveThread.run(Connection.java:147)
  

Ответ №1:

Перед использованием библиотеки необходимо создать библиотеку с использованием NDK. После сборки он сгенерирует файлы .so, которые можно использовать. Подробности: https://developer.android.com/tools/sdk/ndk/index.html

Комментарии:

1. Спасибо, берсерк. Но я уже создаю библиотеку и использовал ее без ошибок. Ошибка возникает только при одной перезагрузке из ста. Это очень странно.

2. @YongJunChang О. Это в конкретном случае или случайно? Я имею в виду, что некоторые функции могут не работать.

3. @ berserk Я могу сказать, что это случайный случай. Как вы можете видеть в журнале ошибок, ‘libFlexCAN.so «был успешно загружен. Но возникает ошибка «Не найдена реализация для native». Я знаю, что это может произойти в случае искажения имени в C . Но libFlexCAN написан на C, и его можно запускать в большинстве случаев.

4. @YongJunChang Попробуйте перестроить lib man. Я не уверен, почему вы получаете ошибку.