Нет таблицы символов архива (запустите ranlib) при сборке libcryptopp.a через ndk-build
Здесь я пытаюсь собрать libcryptopp.a через ndk-build, но я получаю сообщение об ошибке, как показано ниже.
Android.mk
Application.mk
setenv-android.sh его при создании libcryptopp.a и.so с помощью cryptopp 5.6.3
Произошла ошибка в терминале, как показано ниже
$ /Users/kasbahapple/ Документы / AndroidDocs / AndroidADT / adt-bundle-mac-x86_64-20140702 / sdk / ndk-bundle / ndk-build
[armeabi] Gdbserver: [arm-linux-androideabi-4.8] libs / armeabi / gdbserver
[armeabi] Gdbsetup: libs / armeabi / gdb.setup
[armeabi-v7a] Gdbserver: [arm-linux-androideabi-4.8] libs / armeabi-v7a / gdbserver
[armeabi-v7a] Gdbsetup: libs / armeabi-v7a / gdb.setup
[x86] Gdbserver: [x86-4.8] libs / x86 / gdbserver
[x86] Gdbsetup: libs / x86 / gdb.setup
[armeabi] Исполняемый файл: исходный_файл
/Users/kasbahapple/Documents/AndroidDocs/AndroidADT/adt-bundle-mac-x86_64-20140702/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: ошибка: jni/nativelib/libcryptopp.a: нет таблицы символов архива (запустите ranlib)
/Users/kasbahapple/Documents/AndroidDocs/AndroidADT/adt-bundle-mac-x86_64-20140702/sdk/ndk-bundle/platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o:crtbrand.c:function _start: ошибка: неопределенная ссылка на 'main'
collect2: error: ld вернул 1 состояние выхода
Я действительно изо всех сил пытался создать статическую библиотеку C++ через NDK.
Я ищу решение. Дайте мне полный шаг, если я делаю неправильно.
1 ответ
нет таблицы символов архива (запустите ranlib) при сборке libcryptopp.a через ndk-build
После того, как вы построите библиотеку Crypto++ через Android.mk
нужно бежатьranlib
наlibcryptopp.a
, К сожалению, я не знаю, как сказатьAndroid.mk
запустить ранлиб.
Я предполагаю - и это только предположение - что вы должны сделать это в два этапа в Android.mk. Вы не можете перейти к поиску и построить общий объект непосредственно из источников.
- строить
libcryptopp.a
, Бегranlib
- строить
libcryptopp.so
отlibcryptopp.a
setenv-android.sh его при создании libcryptopp.a и.so с помощью cryptopp 5.6.3
...
APP_STL = gnustl_static
Сценарий setenv-android.sh
использует STLport из-за лицензионных ограничений GNU. Ваш Android.mk
использует GNU STL.
Вы, вероятно, должны также использовать те же библиотеки времени выполнения C++. Кроме того, все библиотеки должны использовать одну и ту же среду выполнения. Это означает, что OpenGL, Crypto++, [Favorite library], должны использовать одну и ту же среду выполнения C++, и в ней нет ни смешения, ни сравнения. Кроме того, поскольку несколько библиотек используют среду выполнения C++, вы должны использовать общий объект, а не статическую версию.
В NDK есть README, где это обсуждается. Я думаю, что это называется CPP-README или подобное.
Кроме того, когда вы вызываете setenv-android.sh
, вы должны включить начальную точку. Затем вы запускаете GNUmakefile-cross
:
. ./setenv-android.sh
make -f GNUmakefile-cross static dynamic cryptest.exe
Наконец, пожалуйста, не размещайте фотографии. Я едва могу их прочитать, потому что мои глаза старые. Обычно умиротворение одного пользователя не имеет значения. В этом случае я парень, который написал сценарии и вики-страницы, так что вы хотите, чтобы мне было проще, а не мне:)