【发布时间】: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.so 和libcrypto.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