crtbegin_dynamic.o и crtend_android.o прерванные (?) кросс-компиляции Openssl для Android ARMv7 - PullRequest
0 голосов
/ 21 декабря 2018

Я довольно новичок в мире разработки (с Linux и кросс-компиляцией), и я пытаюсь кросс-компилировать библиотеку OpenSSL для устройства ARM Android, чтобы позже использовать ее в другом проекте.Для этого я использую готовый набор инструментов NDK r17c, предоставляемый Android.Мне нужно использовать этот, потому что я уже кросс-скомпилировал другие библиотеки с этим набором инструментов, и мне нужно будет использовать все их в одном проекте.

Я пробовал ранее с другой версией NDK (15c, 18b ..)) но никто на самом деле не работает лучше.Я также пытался использовать автономный набор инструментов, который я ранее собрал, и он работал с компилятором clang, но не с gcc.И, как я уже говорил ранее, наконец, я не могу использовать этот автономный набор инструментов, потому что я кросс-скомпилировал основные части моей библиотеки с помощью готового набора инструментов (только OpenSSL и libssh2 все еще не скомпилированы).

Итак, чтобы скомпилироватьдля этого я использую файл конфигурации OpenSSL следующим образом:

./Configure os/compiler:/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc   \
--prefix=/home/user/Documents/SSLcompile threads    \
-I/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/sysroot/usr/include    \
-L/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/sysroot/usr/lib/arm-linux-androideabi

Затем я перехожу к «make зависящим», и он работает, а затем к «make» (или «make install»), который не удался.

Я получил эти ошибки и не могу их исправить:

/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory
/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory

Я знаю, что эти файлы находятся в пути

/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/platforms/android-21/arch-arm/usr/lib

, но все, что я пытаюсь датьпуть к Конфигурации не удался.

Можете ли вы предоставить мне некоторые элементы, которые я пропустил, что-то, что я не правильно сделал?

Спасибо!

1 Ответ

0 голосов
/ 26 декабря 2018

Итак, благодаря этой теме , я думаю, что прогрессировал и решил эту проблему.Чтобы связать эти файлы, я добавляю параметр --sysroot = как:

--sysroot=$NDK/platforms/android-21/arch-arm

Это разрешает мне эти ошибки "невозможно открыть ... Нет такого файла или каталога".

Это возможноне хороший ответ для всех и, конечно, не самый лучший, но для меня это исправить, хотя я получил новые ошибки («неопределенная ссылка на pthread_atfork»).

- EDIT

Я сейчас используюAndroid NDK r19 для кросс-компиляции моих библиотек, это проще, и нам не нужно ничего менять или создавать отдельный набор инструментов, мне больше не нужно передавать параметры для кросс-компиляции библиотеки OPENSSL для Android armv7, только:

./Configure os/compiler:/home/user/Documents/NDK/android-ndk-r19/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-clang --prefix=/home/user/Documents/SSLcompile threads

(Файл arm-linux-androideabi-clang является символической ссылкой на armv7a-linux-androideabi22-clang)

...