我一直在敲我的头撞墙:我已经开始编译为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独立钥匙串上的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.我的猜测是,为了编译ARM体系结构* .a和* .so文件,我所做的工作可能在我回到x86体系结构时出现了问题.
标签:android,gcc,makefile,openssl,cross-compiling
来源: https://codeday.me/bug/20190612/1225329.html