Я пытался скомпилировать/связать/запустить проект Android, который использует NDK и имеет 2 этапа компиляции NDK. Мне удалось скомпилировать с помощью GNU-libstdc++ без включения CryptoPP, отличной альтернативы библиотекам OpenSSL для шифрования. С CryptoPP я получаю ошибку времени выполнения, указанную в заголовке.
При компиляции моего проекта Android NDK у меня нет ошибок компилятора, однако во время выполнения библиотека CryptoPP не может найти символ "__cxa_end_cleanup". Я попытался вручную перекомпилировать файл libcryptopp.so, используя STLport, а также GNU-libstdc++, и оба приводят к одной и той же ошибке времени выполнения. Я следовал инструкциям на http://www.cryptopp.com/wiki/Android_(Command_Line )а>. Я правильно меняю APP_STL при смене компиляторов.
Глядя в Интернет, кажется, что эта ошибка связана с обработкой исключений C++, и поэтому я попытался удалить строку из Android.mk "LOCAL_CPP_FEATURES += exceptions", чтобы исключения не включались, но снова , та же ошибка во время выполнения.
Я также загружаю библиотеки в правильном обратном порядке на стороне Java JNI. System.loadLibrary("cryptopp") предшествует загрузке моей другой пользовательской библиотеки.
Я также попытался включить stlport_shared.so в папку armeabi/ и загрузить сначала, а затем cryptopp, и та же ошибка.
Точно так же я попытался включить библиотеку libsupc++.a в папку armeabi/ при компиляции с помощью GNU-libstdc++, так как это библиотека C++, которая добавляет обработку исключений, и включил ссылки на нее в Android.mk "LOCAL_CFLAGS += -lsupc++" и "LOCAL_WHOLE_STATIC_LIBRARIES := libsupc++.a"
Были ли у кого-нибудь подобные проблемы при использовании CryptoPP с Android? И если да, то как вы настроили make-файлы для правильной компоновки библиотек? Наконец, есть идеи, почему это не вызывает ошибку во время компиляции, а только во время выполнения? Полная ошибка вставлена ниже:
E/dalvikvm(15888): ошибка dlopen("/data/app-lib/com.example.test_app/libcryptopp.so"): ошибка dlopen: не удается найти символ "__cxa_end_cleanup", на который ссылается "libcryptopp.so". ..
ANDROID_STL_LIB
(/opt/android-ndk-r9/sources/cxx-stl/stlport/libs/armeabi/libstlport_shared.so
) также был нажат на устройство. Пробовали ли вы включитьlibstlport_shared.so
в папкуarmeabi/
? Кроме того, нет причин пытаться включить в папку статический архив (*.a
). - person jww   schedule 29.08.2014GNUMakefile
Crypto++ не включалLDLLIBS
илиLDFLAGS
, поэтому в общем объекте отсутствовала зависимость отlibstlport_shared.so
. В настоящее время проблемы исправлены, а материал обновлен. - person jww   schedule 03.09.2014