Предполагая, что здесь вы строите для 64-битной системы Linux, автономная процедура в дальнейшем должна работать - у меня работает на Ubuntu 19.10
x86_64
:
# openssl
wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz
tar zxf openssl-1.1.1e.tar.gz
# a toolchain I know is working
wget "https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz?revision=61c3be5d-5175-4db6-9030-b565aae9f766&la=en&hash=0A37024B42028A9616F56A51C2D20755C5EBBCD7" -O gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz
mkdir -p /opt/arm/9
tar Jxf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/arm/9
# building
cd openssl-1.1.1e
./Configure linux-aarch64 --cross-compile-prefix=/opt/arm/9/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- --prefix=/opt/openssl-1.1.1e --openssldir=/opt/openssl-1.1.1e -static
make install
ls -gG /opt/openssl-1.1.1e/bin/
total 10828
-rwxr-xr-x 1 6214 Mar 23 23:27 c_rehash
-rwxr-xr-x 1 11077448 Mar 23 23:27 openssl
file /opt/openssl-1.1.1e/bin/openssl
/opt/openssl-1.1.1e/bin/openssl: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.7.0, with debug_info, not stripped
В случае, если вы Если вы хотите создать 32-битную систему с поддержкой аппаратного обеспечения с плавающей запятой, нам просто нужно немного изменить адаптировать процедуру для трех команд:
wget "https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz?revision=fed31ee5-2ed7-40c8-9e0e-474299a3c4ac&la=en&hash=76DAF56606E7CB66CC5B5B33D8FB90D9F24C9D20" -O gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz
tar Jxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz -C /opt/arm/9
./Configure linux-generic32 --cross-compile-prefix=/opt/arm/9/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf- --prefix=/opt/openssl-1.1.1e --openssldir=/opt/openssl-1.1.1e -static
Обновление: предоставление дополнительной информации после прочтения комментария.
1) linux-generic32
- это, как следует из его названия, обобщенная цель c 32 бит linux, которая должна работать в любой 32-битной системе. Вы можете найти эту информацию во многих местах на Inte rnet, например, здесь . Недостатком является то, что исполняемый файл не может быть оптимизирован для вашей цели. Если вы прочтете сценарий Configure
, вы увидите список переменных среды, которые вы можете указать для направления компиляции. Например, если ваш So C является cortex-a9, вы можете передать опцию -mtune=cortex-a9
, установив CFLAGS
- вы найдете много информации о Inte rnet, но я бы посоветовал взглянуть на Configure
, он содержит много полезных комментариев.
Кстати, если вы выполните Configure
с несуществующей целью, вы получите список всех возможных:
./Configure does-not-exist
2) hf означает аппаратное с плавающей запятой. Некоторые 32-битные манипуляторы Так что C имеет аппаратную поддержку для операций с плавающей запятой, а некоторые нет. Поскольку вы не указали точную марку / модель So C, на которую вы нацеливались, я предположил и использовал цепочку инструментов, способную генерировать код для аппаратного обеспечения с плавающей запятой, когда оно присутствует.