не удается найти -lgnustl_static: компиляция порта Android SDL с помощью NDK r7 - PullRequest
2 голосов
/ 10 января 2012

Я пытаюсь построить этот порт libSDL для Android, используя новую версию Android NDK r7:

https://github.com/pelya/commandergenius

Я знаю, что делаю некоторые вещи в некоторой степени "без поддержки": я использую cygwin & windows, несмотря на то, что это упомянуто в README, поскольку больше не поддерживается. Тем не менее, я могу взломать сценарии оболочки и решить свои проблемы по мере необходимости и сделать так, чтобы он компилировался, но не связывался.

Так или иначе, у меня есть компиляция, работающая до связывания (извините за большой блок, соответствующая часть обрезана ниже):

/cygdrive/c/and/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ar crs obj/local/armeabi/libflac.a ./obj/local/armeabi/objs-debug/flac/src/ogg_decoder_aspect.o ./obj/local/armeabi/objs-debug/flac/src/md5.o ./obj/local/armeabi/objs-debug/flac/src/stream_decoder.o ./obj/local/armeabi/objs-debug/flac/src/fixed.o ./obj/local/armeabi/objs-debug/flac/src/memory.o ./obj/local/armeabi/objs-debug/flac/src/stream_encoder.o ./obj/local/armeabi/objs-debug/flac/src/window.o ./obj/local/armeabi/objs-debug/flac/src/cpu.o ./obj/local/armeabi/objs-debug/flac/src/ogg_encoder_aspect.o ./obj/local/armeabi/objs-debug/flac/src/lpc.o ./obj/local/armeabi/objs-debug/flac/src/float.o ./obj/local/armeabi/objs-debug/flac/src/bitmath.o ./obj/local/armeabi/objs-debug/flac/src/metadata_object.o ./obj/local/armeabi/objs-debug/flac/src/ogg_helper.o ./obj/local/armeabi/objs-debug/flac/src/metadata_iterators.o ./obj/local/armeabi/objs-debug/flac/src/bitreader.o ./obj/local/armeabi/objs-debug/flac/src/bitwriter.o ./obj/local/armeabi/objs-debug/flac/src/stream_encoder_framing.o ./obj/local/armeabi/objs-debug/flac/src/crc.o ./obj/local/armeabi/objs-debug/flac/src/format.o ./obj/local/armeabi/objs-debug/flac/src/ogg_mapping.o
C:/and/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: cannot find -lgnustl_static
collect2: ld returned 1 exit status
/cygdrive/c/and/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ar crs obj/local/armeabi-v7a/libflac.a ./obj/local/armeabi-v7a/objs-debug/flac/src/ogg_decoder_aspect.o ./obj/local/armeabi-v7a/objs-debug/flac/src/md5.o ./obj/local/armeabi-v7a/objs-debug/flac/src/stream_decoder.o ./obj/local/armeabi-v7a/objs-debug/flac/src/fixed.o ./obj/local/armeabi-v7a/objs-debug/flac/src/memory.o ./obj/local/armeabi-v7a/objs-debug/flac/src/stream_encoder.o ./obj/local/armeabi-v7a/objs-debug/flac/src/window.o ./obj/local/armeabi-v7a/objs-debug/flac/src/cpu.o ./obj/local/armeabi-v7a/objs-debug/flac/src/ogg_encoder_aspect.o ./obj/local/armeabi-v7a/objs-debug/flac/src/lpc.o ./obj/local/armeabi-v7a/objs-debug/flac/src/float.o ./obj/local/armeabi-v7a/objs-debug/flac/src/bitmath.o ./obj/local/armeabi-v7a/objs-debug/flac/src/metadata_object.o ./obj/local/armeabi-v7a/objs-debug/flac/src/ogg_helper.o ./obj/local/armeabi-v7a/objs-debug/flac/src/metadata_iterators.o ./obj/local/armeabi-v7a/objs-debug/flac/src/bitreader.o ./obj/local/armeabi-v7a/objs-debug/flac/src/bitwriter.o ./obj/local/armeabi-v7a/objs-debug/flac/src/stream_encoder_framing.o ./obj/local/armeabi-v7a/objs-debug/flac/src/crc.o ./obj/local/armeabi-v7a/objs-debug/flac/src/format.o ./obj/local/armeabi-v7a/objs-debug/flac/src/ogg_mapping.o
C:/and/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: cannot find -lgnustl_static
collect2: ld returned 1 exit status

Соответствующий сбой, если вы не можете разобрать эту стену текста:

ld.exe: cannot find -lgnustl_static

Теперь, если я посмотрю на выпуск Windows NDK, я найду файлы gnustl_ * здесь:

под ./android-ndk-r7/sources:

./cxx-stl/gnu-libstdc++/libs/armeabi/libgnustl_shared.so
./cxx-stl/gnu-libstdc++/libs/armeabi/libgnustl_static.a
./cxx-stl/gnu-libstdc++/libs/armeabi-v7a/libgnustl_shared.so
./cxx-stl/gnu-libstdc++/libs/armeabi-v7a/libgnustl_static.a
./cxx-stl/gnu-libstdc++/libs/x86/libgnustl_shared.so
./cxx-stl/gnu-libstdc++/libs/x86/libgnustl_static.a

Я также посмотрел дистрибутив linux android NDK, и они упакованы одинаково (только файлы libgnustl, собранные в каталоге sources).

Итак, у меня есть 3 вопроса:

  • почему мы используем -l для ссылки на libgnustl_static, когда это .a файл? Разве это не должно быть просто включение файла .a в объект список или поочередно быть -lgnustl_shared?
  • почему эти файлы только в "источниках"? Я ожидал бы, что они будут в каталоге NDK библиотеки "toolchains". Как кто-нибудь может ссылаться на libgnustl?
  • Могу ли я скопировать эти файлы куда-нибудь, где их увидит компоновщик? Просто добавление их каталога с -L, похоже, не работает, и, кроме того, мне нужно получить правильные версии, связанные с правильной целью сборки (armeabi против armeabi-v7 против x86)

Ответы [ 2 ]

3 голосов
/ 20 мая 2013

Это ошибка в gcc / NDK, которая несколько отличается в Linux, Cygwin и Windows (не Cygwin).

Вот что я сделал, чтобы исправить ее (работает для Linux и для одного из моихразработчики, которые слепы и должны использовать Cygwin) ...

  • Удалите строку с надписью APP_STL := gnustl_static из вашего Application.mk (она сломана в NDK и немного по-другому в Linux)Cygwin, Windows)
  • добавить строку к $(LOCAL_LDLIBS) в вашем файле Android.mk, которая гласит:

    $ (NDK_ROOT) / sources / cxx-stl / gnu-libstdc ++ /4.6 / libs / armeabi-v7a / libgnustl_static.a

также добавьте две строки к Android.mk, в которых говорится:

LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/include
LOCAL_C_INCLUDES += $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include

Вышеизложенное будет достигать того,APP_STL := gnustl_static в вашем Application.mk должно было быть.

2 голосов
/ 11 января 2012

В случае, если это мешает кому-то еще, решение состоит в том, чтобы удалить -lgnustl_static и вместо этого перечислить c: \ path \ to \ armeabi \ libs \ libgnustl_static.a в команде компоновщика.

Не использовать / cygdriveстиль пути, так как компоновщик не сможет найти файл.Использовать фактический c: \ ...

...