2016-12-21 5 views
5

Я пытаюсь построить libcryptopp.so и включить его в свой код JNI, следуйте инструкциям в Android Crypto++, у меня возникли следующие проблемы.предупреждение: libcryptopp.so: отсутствует DT_SONAME будет использовать базовое имя в качестве замены

Отсутствующие проблемы символа в Crypto ++ 5.6.3

Первоначально я использовал Crypto ++ 5.6.3, я наткнулся на эту проблему:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_Z9GlobalRNGv" 

referenced by "/data/app/com.example.administrator.jnitest-2/lib/arm/libcryptopp.so"... 

Я проверяю libcryptopp.so:

$ readelf -Ws libcryptopp.so | grep _Z9GlobalRNGv 
1406: 00000000  0 NOTYPE GLOBAL DEFAULT UND _Z9GlobalRNGv 
15836: 00000000  0 NOTYPE GLOBAL DEFAULT UND _Z9GlobalRNGv 

переключение на Crypto ++ 5.6.4 исправить эту проблему, но я до сих пор не знаю причину и столкнулся с другой проблемой:

Отсутствующие DT_SONAME

12-21 09:50:20.837 21677-21677/com.example.administrator.jnitest 
W/linker: /data/app/com.example.administrator.jnitest- 1/lib/arm/libcryptopp.so: is missing DT_SONAME will use basename as a 
replacement: "libcryptopp.so" 

На самом деле это только предупреждение, приложение не будет врезаться.

Я использую последнюю версию android Mashwallow MOB31K. Кто-то также испытали подобные проблемы с помощью других библиотек

https://github.com/bytedeco/javacpp-presets/issues/188 

на Android N-превью.

Почему я получаю предупреждение и как его исправить?

+0

Это отличное намерение поделиться своими знаниями :) Хотя правильный способ сделать это - поставить вопрос, как если бы у вас действительно была проблема, и отвечая на свой вопрос. Если вы дадите свой пост, как сейчас, люди никогда не узнают, что вы действительно даете ответ. Благодарим за вклад! –

+0

@Yao - 5.6.3 добавлено SONAME. Мы заметили, что у людей возникли проблемы с версиями libs на iOS и Android, поэтому мы удалили SONAME для мобильных целей на 5.6.4. В списке рассылки об Android и версиях libs есть несколько вопросов. Также см. [Commit d9c3c51aa8d3e710, Сделать не-SOLIBNAME версией по умолчанию для Android и Embedded] (https: // github.ком/weidai11/cryptopp/фиксации/d9c3c51aa8d3e710b296b640d768d7b2cbac6efc). – jww

+0

@Rightleg, спасибо за инструкцию, я новый парень. Мне жаль, что позже я нахожу, что это на самом деле предупреждение, я сделал исправление. Но, надеюсь, это может быть полезно. – yao

ответ

2

После некоторых попыток, я нахожу одно решение несовершенным.

Похоже, что для андроида N очереди требуется версия библиотеки.

включить SONAME флаг на сборке.

Cryptopp отключает флаг версии по умолчанию. В GNUmakefile-накрест ,:

HAS_SOLIB_VERSION ?= 0 

установить значение 1:

HAS_SOLIB_VERSION ?= 1 

сборки, а затем использовать сгенерированный файл .so. предупреждение будет идти.

проблема в том, что библиотека не будет работать на android 5.0. Поэтому нам лучше оставить это предупреждение сейчас.

 Смежные вопросы

  • Нет связанных вопросов^_^