How to create OpenSSL as unversioned shared lib for Android?

I am trying to create the latest version of OpenSSL for Android after compiling the latest version of OpenSSL for Android . I am able to create static libraries.

However, I am trying to compile shared libraries. To do this, I run:

./Configure android-armv7 shared

It compiles. The problem is that this creates a version of lib like libssl.so.1.0.0 which is not supported by Android. Just rename does not, because SONAME still points to the name of the version file.

Another problem is trying to create libs for the old armeabi platform. When I run:

./Configure android shared

it creates static libs for the old armeabi platform, the shared libraries, however, are the arm-v7 architecture.

+4
source share
2 answers

Regarding creating a version libcryptowithout overwriting, overwriting CALC_VERSIONSdoes the trick (at least for 1.0.2d):

make CALC_VERSIONS="SHLIB_COMPAT=; SHLIB_SOVER=" all

Then the target sub- link-sharedtarget install_swmust be disabled (otherwise broken symbolic links will overwrite the libraries), which can be done by creating a mock-up file with the same name in a suitable location (in addition, SHLIB_EXT should also be set for files without a copy version) .

In general, the bash script I used:

ORIG_PATH=$PATH
SCRIPT_PATH=$(dirname $(readlink -f $0))

tar -zxf $SCRIPT_PATH/openssl-fips-2.0.10.tar.gz
tar -zxf $SCRIPT_PATH/openssl-1.0.2d.tar.gz

ANDROID_NDK_PATH=<system-specific-path>/android-ndk-r10e-linux
ANDROID_API=android-14
ANDROID_SYSROOT=$ANDROID_NDK_PATH/platforms/$ANDROID_API/arch-arm
export OPENSSLDIR=$SCRIPT_PATH/ssl/android/arm
export FIPSDIR=$OPENSSLDIR/fips-2.0
export HOSTCC=gcc
export FIPS_SIG=$SCRIPT_PATH/openssl-fips-2.0.10/util/incore
export ANDROID_DEV=$ANDROID_SYSROOT/usr
export PATH=$ANDROID_NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$ORIG_PATH
export MACHINE=armv7
export RELEASE=2.6.37
export SYSTEM=android
export ARCH=arm
export CROSS_COMPILE=arm-linux-androideabi-

cd $SCRIPT_PATH/openssl-fips-2.0.10
./config shared
make clean
make
make install_sw

cd $SCRIPT_PATH/openssl-1.0.2d
./config fips shared -no-sslv2 -no-sslv3 -no-comp -no-hw -no-engines --openssldir=$OPENSSLDIR --with-fipsdir=$FIPSDIR --with-fipslibdir=$FIPSDIR/lib/
make clean
make depend
make CALC_VERSIONS="SHLIB_COMPAT=; SHLIB_SOVER=" MAKE="make -e" all
mkdir -p $OPENSSLDIR/lib
echo "place-holder make target for avoiding symlinks" >> $OPENSSLDIR/lib/link-shared
make SHLIB_EXT=.so install_sw
rm $OPENSSLDIR/lib/link-shared

Then no generated object file should have or reference a version with the name:

$ readelf -d ssl/android/arm/lib/libcrypto.so | grep 'SONAME\|NEEDED'
 0x00000001 (NEEDED)                     Shared library: [libdl.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x0000000e (SONAME)                     Library soname: [libcrypto.so]
$ readelf -d ssl/android/arm/lib/libssl.so | grep 'SONAME\|NEEDED'
 0x00000001 (NEEDED)                     Shared library: [libcrypto.so]
 0x00000001 (NEEDED)                     Shared library: [libdl.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x0000000e (SONAME)                     Library soname: [libssl.so]
$ readelf -d ssl/android/arm/bin/openssl | grep 'SONAME\|NEEDED'
 0x00000001 (NEEDED)                     Shared library: [libssl.so]
 0x00000001 (NEEDED)                     Shared library: [libcrypto.so]
 0x00000001 (NEEDED)                     Shared library: [libdl.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
+7
source

OpenSSL lib ( Android)?

, -. , ( OpenSSL): OpenSSL Android.


. :

./ android-armv7

, . , Android NDK. AOSP. - , NDK.

, . OpenSSL.

  • x86:

    • export MACHINE=i686
    • export RELEASE=2.6.37
    • export SYSTEM=android
    • export ARCH=x86
    • export CROSS_COMPILE="i686-linux-android-"
  • ARM:

    • export MACHINE=armv7
    • export RELEASE=2.6.37
    • export SYSTEM=android
    • export ARCH=arm
    • export ANDROID_DEV="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH/usr"
    • export HOSTCC=gcc

ANDROID_DEV /opt/android-ndk-r9/platforms/android-14/arch-arm/usr.

. , --sysroot. --sysroot - /opt/android-ndk-r9/platforms/android-14/arch-arm.

OpenSSL Android. , , - setenv-android.sh, .


OpenSSL Android.

$ cd openssl-1.0.1h
$ . ./setenv-android.sh 
Error: FIPS_SIG does not specify incore module. Please edit this script.
ANDROID_NDK_ROOT: /opt/android-ndk-r9
ANDROID_EABI: arm-linux-androideabi-4.6
ANDROID_API: android-14
ANDROID_SYSROOT: /opt/android-ndk-r9/platforms/android-14/arch-arm
ANDROID_TOOLCHAIN: /opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin
FIPS_SIG: 
CROSS_COMPILE: arm-linux-androideabi-
ANDROID_DEV: /opt/android-ndk-r9/platforms/android-14/arch-arm/usr

$ ./config shared no-ssl2 no-ssl3 no-comp no-engines no-hw no-psk no-srp
Operating system: armv7-whatever-android
Configuring for android-armv7
Configuring for android-armv7
    no-comp         [option]   OPENSSL_NO_COMP (skip dir)
    no-ec_nistp_64_gcc_128 [default]  OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir)
    no-engines      [option]   OPENSSL_NO_ENGINES (skip dir)
    ...
    no-srp          [option]   OPENSSL_NO_SRP (skip dir)
    no-ssl2         [option]   OPENSSL_NO_SSL2 (skip dir)
    no-ssl3         [option]   OPENSSL_NO_SSL3 (skip dir)
    no-store        [experimental] OPENSSL_NO_STORE (skip dir)
    no-zlib         [default] 
    no-zlib-dynamic [default] 
IsMK1MF=0
CC            =gcc
...

$ make
...
arm-linux-androideabi-gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS
-D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -march=armv7-a -mandroid
-mfloat-abi=softfp -I/opt/android-ndk-r9/platforms/android-14/arch-arm/usr/include
-B/opt/android-ndk-r9/platforms/android-14/arch-arm/usr/lib -Os -fomit-frame-pointer
-Wall -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM
-DAES_ASM -DGHASH_ASM   -c -o cryptlib.o cryptlib.c
...

Error: FIPS_SIG does not specify incore module..., FIPS Capable.


... unversioned shared lib ( Android)?

, , . , - lib . , OpenSSL, .

, Zygote. Zygote OpenSSL 0.9.8, . , Zygote forks , 0.9.8, APK . OpenSSL. .


, OpenSSL Configure . -, -mfloat-abi=softfp. AOSP. -, -O3, -Os. .

, Makefile . , .

+4

Source: https://habr.com/ru/post/1544464/


All Articles