我一直在为这个问题苦恼:我已经成功编译了openssl适用于android armeabi架构,但是对于x86架构的支持要少得多,而且在openSSL网站上找不到任何相关信息。最终我找到了英特尔公司的一篇文章(https://software.intel.com/en-us/articles/using-intel-advanced-encryption-standard-new-instructions-on-android#openssl),它介绍了如何使用openssl适用于x86架构。在创建了一个独立的工具链之后,我按照提供的代码进行了修复,但在编译过程中,make会在几乎完成所有编译操作之后失败,并出现大量未定义引用“XXX”的语句。目前我无法解决这个问题,非常希望能得到帮助。
如果这个问题很琐碎,我表示歉意,因为我对make非常陌生。
跟踪信息:
/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_tst_info'的引用 /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+0x1ea2)中:错误:未定义对'TS_TST_INFO_free'的引用 /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: 在函数srp_verify_user:srp.c(.text+0xb3)中:错误:未定义对'SRP_create_verifier'的引用 /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: 在函数srp_create_user:srp.c(.text+0x1e3)中:错误:未定义对'SRP_create_verifier'的引用 /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: 在函数srp_main:srp.c(.text+0x1014)中:错误:未定义对'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: 在函数srp_main:srp.c(.text+0x10c0)中:错误:未定义对'SRP_get_default_gN'的引用 /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: 在函数srp_main:srp.c(.text+0x16dd)中:错误:未定义对'TXT_DB_insert'的引用
抱歉,由于在setenv脚本中他们指定了eabi,我认为这意味着只能选择ARM eabi之一,因为其他架构没有使用它进行指定。我查看了openSSL有关在Android上编译ARM的说明,但我不知道它也适用于x86。如果是这样,那么我感到很愚蠢。 我将--sysroot选项设置为独立密钥链上的sysroot。
以下是我按照英特尔有关此主题的文章所使用的x86编译命令。
如果这个问题很琐碎,我表示歉意,因为我对make非常陌生。
跟踪信息:
/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_tst_info'的引用 /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+0x1ea2)中:错误:未定义对'TS_TST_INFO_free'的引用 /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: 在函数srp_verify_user:srp.c(.text+0xb3)中:错误:未定义对'SRP_create_verifier'的引用 /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: 在函数srp_create_user:srp.c(.text+0x1e3)中:错误:未定义对'SRP_create_verifier'的引用 /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: 在函数srp_main:srp.c(.text+0x1014)中:错误:未定义对'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: 在函数srp_main:srp.c(.text+0x10c0)中:错误:未定义对'SRP_get_default_gN'的引用 /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: srp.o: 在函数srp_main:srp.c(.text+0x16dd)中:错误:未定义对'TXT_DB_insert'的引用
抱歉,由于在setenv脚本中他们指定了eabi,我认为这意味着只能选择ARM eabi之一,因为其他架构没有使用它进行指定。我查看了openSSL有关在Android上编译ARM的说明,但我不知道它也适用于x86。如果是这样,那么我感到很愚蠢。 我将--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