android - 编译为在 Android x86 架构上运行的 OpenSSL

标签 android gcc openssl makefile cross-compiling

我一直在用头撞墙:我已经让 openssl 为 android armeabi 架构编译得很好,但是对 x86 的帮助要少得多,而且我在 openSSL 上找不到任何东西网站。

我最终发现的是一篇关于在 x86 架构中使用 openssl 的英特尔文章 ( https://software.intel.com/en-us/articles/using-intel-advanced-encryption-standard-new-instructions-on-android#openssl ),在创建了一个独立的工具链,并浏览了他们提供的代码并修复了其中的一些之后,我到了 make在出现一堆未定义的对“XXX”语句的引用失败之前,将几乎完成所有编译过程。我现在不知道如何解决这个问题,将不胜感激任何帮助。

如果这最终有点微不足道,我深表歉意,我是新手。

跟踪:

/private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: ts.o: in function ts_main:ts.c(.text+0x1e8a): error: undefined reference to 'TS_RESP_set_tst_info' /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: ts.o: in function ts_main:ts.c(.text+0x1ea2): error: undefined reference to 'TS_TST_INFO_free' /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: in function srp_verify_user:srp.c(.text+0xb3): error: undefined reference to 'SRP_create_verifier' /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: in function srp_create_user:srp.c(.text+0x1e3): error: undefined reference to 'SRP_create_verifier' /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: in function srp_main:srp.c(.text+0x1014): error: undefined reference to 'X509_get_default_cert_area' /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: in function srp_main:srp.c(.text+0x10c0): error: undefined reference to 'SRP_get_default_gN' /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: in function srp_main:srp.c(.text+0x16dd): error: undefined reference to 'TXT_DB_insert'

编辑: 抱歉,由于他们在 setenv 脚本中指定了 eabi,我认为这意味着您只能选择一个 ARM eabi,因为其他架构没有指定。我去过 openSSL 在 android 上编译 ARM 的说明,但我不知道它也适用于 x86。如果真是这样,那我就觉得自己傻了。 我将 --sysroot 选项设置为 android 独立钥匙串(keychain)上的 sysroot。

根据有关该主题的英特尔文章,这些是我用于 x86 编译的命令。

    export CC="$STANDALONE_TOOCHAIN_PATH/bin/i686-linux-android-gcc -mtune=atom -march=atom --sysroot=$STANDALONE_TOOCHAIN_PATH/sysroot"
    export AR=$STANDALONE_TOOCHAIN_PATH/bin/i686-linux-android-ar
    export RANLIB=/private/tmp/my-android-toolchain/bin/i686-li
    ./Configure android-x86 -DOPENSSL_IA32_SSE2 -DAES_ASM -DVPAES_ASM

最佳答案

看来我已经明白了。使用我发布的代码(因为文章中的代码在语法上略有不正确,但想法是正确的)并且在制作了自定义 android 工具链之后,我能够在全新安装 OpenSSL 后成功运行 make。我的猜测是,当我回到 x86 架构时,我为编译 ARM 架构 *.a 和 *.so 文件所做的工作可能会出错。

如果不确定如何创建独立工具链(使用简单方法选项):http://www.kandroid.org/ndk/docs/STANDALONE-TOOLCHAIN.html

关于android - 编译为在 Android x86 架构上运行的 OpenSSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24130501/

相关文章:

Android loadurl 无法执行javascript

c - 在 GNU C 内联汇编中与推送/分配/弹出交换?

c++ - 在 C++ 头文件上检查操作系统时出错

c - BIO_do_connect 导致段错误

android - 使用 Firebase Cloud Messaging(适用于 Android)时可以创建子主题吗?

android - Sony Smartwatch 2 加速计传感器在 FixedRate Listener 中出现问题

ssl - "Public key certificate and private key doesn' t match"当使用Godaddy颁发的证书

iphone - iOS 上的 AES-256 加密不会产生与 openssl 相同的结果

android - cordova android 在 mac 上安装错误

c++ - 单个继承的派生类的大小