Нет таблицы символов архива (запустите 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

Наконец, пожалуйста, не размещайте фотографии. Я едва могу их прочитать, потому что мои глаза старые. Обычно умиротворение одного пользователя не имеет значения. В этом случае я парень, который написал сценарии и вики-страницы, так что вы хотите, чтобы мне было проще, а не мне:)

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