【问题标题】:Openssl for Android x86_64 and mips64适用于 Android x86_64 和 mips64 的 Openssl
【发布时间】:2014-11-06 12:29:14
【问题描述】:

我已经为 5/7 的 android-21 (android-L) 架构构建了 openssl:armeabi、armeabi-v7a、arm64、mips、x86。但是我无法为 x86_64 和 mips64 构建它。

我在做什么...

x86 - 工作

以下是我的 x86 工作脚本,使用 make-standalone-toolchain 创建的工具链:

export ANDROID_NDK_ROOT=/Users/jacsteve/dev/android/ndk
export ANDROID_API=android-21
export ANDROID_ARCH=arch-x86
export ANDROID_EABI=i686-linux-android-4.9
export ANDROID_SYSROOT=$ANDROID_NDK_ROOT/platforms/$ANDROID_API/arch-x86
export ANDROID_TOOLCHAIN=/tmp/toolchain/x86
export ANDROID_DEV=$ANDROID_SYSROOT/usr

export SYSTEM=android
export ARCH=x86

export CROSS_COMPILE=i686-linux-android-

export CFLAGS="--sysroot=$ANDROID_SYSROOT"
export CPPFLAGS="--sysroot=$ANDROID_SYSROOT"
export CXXFLAGS="--sysroot=$ANDROID_SYSROOT"

./Configure android-x86 shared no-asm -no-ssl2 -no-ssl3 -no-comp -no-hw --cross-compile-prefix=$CROSS_COMPILE --openssldir=/tmp/ssl/x86

make depend
make
make install

这很好用,在/tmp/ssl/x86 中留下libssl.solibcrypto.so

x86_64 - 失败

但是,x86_64 失败。这是脚本:

export ANDROID_NDK_ROOT=/Users/jacsteve/dev/android/ndk
export ANDROID_API=android-21
export ANDROID_ARCH=arch-x86_64
export ANDROID_EABI=x86_64-linux-android-4.9
export ANDROID_SYSROOT=$ANDROID_NDK_ROOT/platforms/$ANDROID_API/arch-x86_64
export ANDROID_TOOLCHAIN=/tmp/toolchain/x86_64
export ANDROID_DEV=$ANDROID_SYSROOT/usr

export SYSTEM=android
export ARCH=x86_64

export CROSS_COMPILE=x86_64-linux-android-

export CFLAGS="--sysroot=$ANDROID_SYSROOT"
export CPPFLAGS="--sysroot=$ANDROID_SYSROOT"
export CXXFLAGS="--sysroot=$ANDROID_SYSROOT"

./Configure android-x86 shared no-asm -m64 -no-ssl2 -no-ssl3 -no-comp -no-hw --cross-compile-prefix=$CROSS_COMPILE --openssldir=/tmp/ssl/x86_64

make depend
make
make install

错误...

x86_64

我从make 调用中收到大量错误消息,如下所示:

/private/tmp/toolchain/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/bin/ld:
error: libcrypto.a(cryptlib.o): incompatible target
/private/tmp/toolchain/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/bin/ld:
error: libcrypto.a(mem.o): incompatible target
...
collect2: error: ld returned 1 exit status

在我看来x86_64-linux-android-gcc 正在编译一切正常,但是当我们进入链接阶段时,x86_64-linux-android-ld 无法读取编译的目标文件。

mips64

对 mips64 使用类似设置(使用 ./Configure android-mips ...)我收到以下错误,这看起来与 mips64-linux-android-ld 无法读取目标文件的类似问题:

/Users/jacsteve/dev/android/ndk/platforms/android-21/arch-mips64/usr/lib/libdl.so: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status

有人知道如何成功构建 x86_64 和 mips64 架构吗?

【问题讨论】:

  • 杰克,我知道这个问题很老了,但是可以分享你用于这些构建的配置吗?我正在尝试构建 arm64、mips64 和 x86_64。
  • 当然!当我这样做时,我编写了一个快速的 bash 脚本 - 我已经将它放在 github 上只是为了你:) gist.github.com/cogwirrel/4a733b4138d1b35d4cfe69b4df110d0b

标签: android android-ndk openssl x86-64 android-5.0-lollipop


【解决方案1】:

解决了!

而不是

./Configure android-x86 ...

我用过

./Configure linux-generic64 ...

我还将linux-generic32 用于 32 位架构。

【讨论】:

    【解决方案2】:

    在 ./Configure 之前运行 make clean 为我解决了问题。

    【讨论】:

      【解决方案3】:

      为mips64构建openssl的错误,我猜是由于对象和库之间的ABI格式不兼容,格式对象是mips-ELF64,而ANDROID_NDK提供的库是mips ELF32

      cd ${ANDROID_NDK_HOME}/platforms/android-24/arch-mips64/usr/lib
      readelf -h libc.so
        ELF Header:
        Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
        Class:                             ELF32
        Data:                              2's complement, little endian
        Version:                           1 (current)
        OS/ABI:                            UNIX - System V
        ABI Version:                       0
        Type:                              DYN (Shared object file)
        Machine:                           MIPS R3000
        Version:                           0x1
        Entry point address:               0xa7d0
        Start of program headers:          52 (bytes into file)
        Start of section headers:          204792 (bytes into file)
        Flags:                             0x50001007, noreorder, pic, cpic, o32, mips32
        Size of this header:               52 (bytes)
        Size of program headers:           32 (bytes)
        Number of program headers:         6
        Size of section headers:           40 (bytes)
        Number of section headers:         18
        Section header string table index: 15
      

      【讨论】:

        猜你喜欢
        • 2017-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        相关资源
        最近更新 更多