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

OpenSSL编译为在Android x86架构上运行,android,gcc,openssl,makefile,cross-compiling,Android,Gcc,Openssl,Makefile,Cross Compiling,这一次,我的头撞到了墙上:我已经让openssl为android armeabi架构进行了很好的编译,但是对x86的帮助太少了,而且我在openssl的网站上找不到任何帮助 我最终找到的是一篇关于使用openssl for x86体系结构的英特尔文章(),在创建了一个独立的工具链,检查了他们提供的代码并修复了其中的一些代码之后,make在编译过程中几乎完成了所有过程,但由于大量未定义的引用“XXX”语句而失败。我现在还不知道如何度过这一关,任何帮助都将不胜感激 我很抱歉,如果这最终变得有些琐碎,

这一次,我的头撞到了墙上:我已经让openssl为android armeabi架构进行了很好的编译,但是对x86的帮助太少了,而且我在openssl的网站上找不到任何帮助

我最终找到的是一篇关于使用openssl for x86体系结构的英特尔文章(),在创建了一个独立的工具链,检查了他们提供的代码并修复了其中的一些代码之后,make在编译过程中几乎完成了所有过程,但由于大量未定义的引用“XXX”语句而失败。我现在还不知道如何度过这一关,任何帮助都将不胜感激

我很抱歉,如果这最终变得有些琐碎,我是一个新手

跟踪:

/private/tmp/my android toolchain/bin//lib/gcc/i686 linux android/4.6/../../../../../..//i686 linux android/bin/ld:ts.o:在函数ts_main:ts.c(.text+0x1e8a):错误:未定义对“ts_RESP_set_tsu info”的引用 /private/tmp/my-android toolchain/bin//lib/gcc/i686 linux-android/4.6/../../../../../..//i686 linux-android/bin/ld:ts.o:在函数ts\u main:ts.c(.text+0x1ea2):错误:未定义对“ts\u TST\u INFO\u free”的引用 /private/tmp/my-android toolchain/bin/。/lib/gcc/i686 linux-android/4.6/。/../../../../..//i686 linux-android/bin/ld:srp.o:函数中的srp\u-verify\u用户:srp.c(.text+0xb3):错误:未定义对“srp\u-create\u-verifyer”的引用 /private/tmp/my-android toolchain/bin/。/lib/gcc/i686 linux-android/4.6/。/../../../../..//i686 linux-android/bin/ld:srp.o:函数中srp\u-create\u-user:srp.c(.text+0x1e3):错误:未定义对“srp\u-create\u-verifier”的引用 /private/tmp/my android toolchain/bin/./lib/gcc/i686 linux android/4.6/./../../../../..//i686 linux android/bin/ld:srp.o:函数srp\u main:srp.c(.text+0x1014):错误:未定义对“X509\u get\u default\u cert\u区域”的引用 /private/tmp/my android toolchain/bin/./lib/gcc/i686 linux android/4.6/./../../../../..//i686 linux android/bin/ld:srp.o:函数srp\u main:srp.c(.text+0x10c0):错误:未定义对“srp\u get\u default\gN”的引用 /private/tmp/my-android toolchain/bin//lib/gcc/i686 linux-android/4.6/../../../../../..//i686 linux-android/bin/ld:srp.o:函数srp\u main:srp.c(.text+0x16dd):错误:未定义对“TXT\u DB\u insert”的引用

编辑: 很抱歉,由于他们在setenv脚本中指定了eabi,我认为这意味着您只能选择一个ARM eabi,因为其他架构没有指定。我已经阅读了android上的openSSL说明来编译ARM,但我不知道它也适用于x86。如果是这样的话,我会觉得自己很笨。 我在android独立键链上将--sysroot选项设置为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
但是对于x86的帮助太少了,我在openSSL的站点上找不到任何帮助

我相信OpenSSL wiki涵盖了以下主题:


我最终发现了一篇英特尔的文章。。。关于在x86体系结构中使用openssl

您只需选择正确的abi即可。根据Android wiki页面,您可以在
setenv Android.sh
脚本中调整以下内容:

  • \u ANDROID\u NDK
    ——NDK的版本。例如,android-ndk-r8e
  • \u ANDROID\u EABI
    –EABI工具的版本。例如,arm-linux-androideabi-4.6
  • \u ANDROID\u API
    –API级别。例如,android-14
维基上有一个完整的小节:。请让我们知道是否有任何差距。(我用ARM测试了它,但不是x86)

有很多ABI可供选择。您可能需要
x86-4.6
API14
API18

您可能需要修改
配置
,但目前看来您还没有做到这一点,所以很难说。您不需要修改configure-android-x86目标已经存在


/private/tmp/my-android工具链/bin/./lib/gcc/i686-linux-android/4.6/../../../../../../i686-linux-android/bin/ld:ts.o: 在函数ts_main:ts.c(.text+0x1e8a)中:错误:未定义对“ts_RESP_set_tst_info”的引用/private/tmp/my-android toolchain/bin/。/lib/gcc/i686-linux-android/4.6/。/../../../../../i686-linux-android/bin/ld

看起来您几乎缺少了
--sysroot
。肯定有什么事


您可能应该向我们展示一个编译行和一个链接行(其中一个C文件是什么样子的,而不是所有文件的转储)。

看来我已经弄明白了。使用我发布的代码(因为文章中的代码在语法上有点不正确,但想法是正确的),在制作了一个定制的android工具链之后,我能够在新安装的OpenSSL之后成功运行make。我的猜测是,我对它所做的工作是为了编译ARM体系结构*.a和*.s,所以当我回到x86体系结构时,文件可能搞错了什么


如果不确定如何创建独立的工具链(使用简易方法选项):

我这里有一个类似的答案,但这是针对ArmV7的。只需执行与上一步相同的过程,但使用这个特定的setenv-android.sh脚本:

即使在将eabi切换到x86文件夹并修复setenv脚本的路径错误后,运行./config仍然会显示项目是“为android-armv7配置的”,然后出现“make depend”故障声明在/util/domd中找不到命令arm-linux-androideabi-gcc。由于在openssl的setenv脚本中使用arm体系结构以外的任何东西都需要大量的错误和修复,我发现这是一种更简单的方法。“…我的猜测是,我对它所做的工作是为了编译ARM架构*.a和*.so文件可能弄糟了一些东西…”-在更改平台之前,您应该