Ошибка компоновщика и неправильная целевая архитектура при сборке OpenSSL для AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка компоновщика и неправильная целевая архитектура при сборке OpenSSL для Android

Сообщение Anonymous »

Я хочу собрать OpenSSL для Android как зависимость от моего C++-приложения, созданного с помощью Conan. Сборка Конана (

Код: Выделить всё

conan install /.../my_project -pr:h android34-armv8-clang-17-c++_shared -pr:b default --build=missing
), в остальном работает как положено.
android34-armv8-clang-17-c++_shared (целевая архитектура) профиль:

Код: Выделить всё

[settings]
os=Android
arch=armv8
compiler=clang
compiler.version=17
compiler.libcxx=c++_shared
build_type=Debug
os.api_level=34
[options]
[build_requires]
[buildenv]
ANDROID_NDK_HOME=/home/user/Android/Sdk/ndk/26.3.11579264
ANDROID_NDK=$ANDROID_NDK_HOME
ANDROID_NDK_ROOT=/home/user/Android/Sdk/ndk/26.3.11579264
ANDROID_SDK_ROOT=$ANDROID_HOME
ANDROID_NDK_VERSION=26.3.11579264
CC=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
CXX=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
RANLIB=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib
AR=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
[env]
ANDROID_NDK_HOME=/home/user/Android/Sdk/ndk/26.3.11579264
ANDROID_NDK_ROOT=/home/user/Android/Sdk/ndk/26.3.11579264
ANDROID_NDK=$ANDROID_NDK_HOME
ANDROID_SDK_ROOT=$ANDROID_HOME
ANDROID_NDK_VERSION=26.3.11579264
CC=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
CXX=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
RANLIB=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib
AR=/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
[conf]
tools.android:ndk_path=/home/user/Android/Sdk/ndk/26.3.11579264/
Конан правильно определяет зависимости (например, openssl/3.2.1) и запускает кросс-сборку ("

Код: Выделить всё

Cross-build from 'Linux:x86_64' to 'Android:armv8'
").
Затем запускается сборка для openssl, которая, похоже, также правильно определяет цель:

Код: Выделить всё

openssl/3.2.1: using target: conan-Debug-Android-armv8-clang-17 -> linux-generic64
openssl/3.2.1: my %targets = (
"conan-Debug-Android-armv8-clang-17" => {
inherit_from => [ "linux-generic64" ],
cflags => add("-g"),
cxxflags => add("-g"),

lflags => add(""),

perlasm_scheme => "linux64",
},
);

openssl/3.2.1: Aggregating env generators
openssl/3.2.1: Calling build()
openssl/3.2.1: apply_conandata_patches(): No patches defined in conandata
openssl/3.2.1: Running: perl ./Configure "conan-Debug-Android-armv8-clang-17" shared --prefix=/ --libdir=lib --openssldir="/home/user/.conan/data/openssl/3.2.1/_/_/package/307503e24fa1e7276c553bf27b1fc9befa5ee61a/res" no-unit-test threads PERL=perl no-tests --debug  -D__ANDROID_API__=34 -fPIC enable-fips no-md2 zlib --with-zlib-include="/home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/include"  --with-zlib-lib="/home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib"
Configuring OpenSSL version 3.2.1 for target conan-Debug-Android-armv8-clang-17
Using os-specific seed configuration
...
OpenSSL has been successfully configured
...
Итак, конфигурация работает, но процесс сборки позже завершается неудачно:

Код: Выделить всё

/home/user/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -fPIC -pthread -g -g -fPIC -Wl,-z,defs -Wl,-znodelete -shared -Wl,-Bsymbolic -L/home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib  \
-o providers/fips.so -Wl,--version-script=providers/fips.ld \
providers/fips/fips-dso-fips_entry.o \
providers/libfips.a -lz -ldl -pthread
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(adler32.c.o) is incompatible with elf64-x86-64
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(compress.c.o) is incompatible with elf64-x86-64
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(crc32.c.o) is incompatible with elf64-x86-64
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(deflate.c.o) is incompatible with elf64-x86-64
ld.lld: error: /home/user/.conan/data/zlib/1.3.1/_/_/package/023d2329c8205a068e7539cdd05ad94dd88a0fab/lib/libz.a(gzclose.c.o) is incompatible with elf64-x86-64
...
clang-17: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile:25460: providers/fips.so] Error 1
make[1]: *** Waiting for unfinished jobs....
clang-17: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile:26026: util/quicserver] Error 1
clang-17: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile:5727: libcrypto.so.3] Error 1
make[1]: Leaving directory '/home/user/.conan/data/openssl/3.2.1/_/_/build/307503e24fa1e7276c553bf27b1fc9befa5ee61a/src'
make: *** [Makefile:3232: build_sw] Error 2
Проблема заключается в несоответствии целей компиляции. Зависимость zlib скомпилирована для Armv8, и это правильно, потому что это архитектура моего целевого телефона Android. По какой-то причине процесс сборки OpenSSL ожидает, что это будет x86, и из-за этого несоответствия происходит сбой.
В репозитории OpenSSL есть несколько документов, объясняющих процесс сборки, ПРИМЕЧАНИЕ_ANDROID.md, INSTALL.md и файл конфигурации 15-android.conf. Я следовал инструкциям, поэтому была установлена ​​переменная среды ANDROID_NDK_ROOT, и я проверил, что -D__ANDROID_API__ установлен для правильного целевого API.
Я думаю, проблема в целевом conan-Debug-Android -armv8-clang-17. Он автоматически создается конан-файлом OpenSSL, в котором прямо упоминается, что «цели Android очень сломаны».

Подробнее здесь: https://stackoverflow.com/questions/791 ... or-android
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка компоновщика и неправильная целевая архитектура при сборке OpenSSL для Android
    Anonymous » » в форуме Android
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Python libusb pyusb "mach-o, но неправильная архитектура"
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • OpenSSL выпуск "Ошибка ошибки openssl: 0A00018E: SSL Prontines :: CA MD слишком слабые"
    Anonymous » » в форуме Linux
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • OpenSSL выпуск "Ошибка ошибки openssl: 0A00018E: SSL Prontines :: CA MD слишком слабые"
    Anonymous » » в форуме Linux
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Проблема с ссылкой oatpp-openssl для openSSL 1.1.1.k
    Anonymous » » в форуме C++
    0 Ответы
    64 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»