我正在做一个android项目,该项目要求应用程序中存在的加密库必须经过FIPS认证。据我所知,目前还没有经过FIPS验证的JAVA安全库。布西城堡是好的,但它没有得到验证。在阅读了一些论坛帖子后,我发现OpenSSL的FIPS模块可以在NDK的帮助下使用。
现在,我正在尝试为Android构建fips-openssl模块,为此,我为环境变量创建了一个用于交叉编译的脚本。
我在这个项目中使用openssl-fips和ndk-r8。我关注了我在谷歌上找到的fips guideline。我希望这能清楚地说明我正在尝试做什么。
#! /bin/sh
export ANDROID_NDK="~/Android/android-ndk-r8"
export FIPS_SIG="${ANDROID_NDK}/incore"
export GCC_C1="/usr/lib/gcc/i686-pc-linux-gnu/4.7.0/"
export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin";
export MACHINE=armv71
export ARCH=arm.
export CROSS_COMPILE="arm-linux-androideabi-"
export SYSTEM=android
#export RELEASE=2.6.32.GMU
export ANDROID_DEV="$ANDROID_NDK/platforms/android-14/arch-arm/usr"
export HOSTCC=/usr/bin/gcc在执行make时,这是我得到的错误。
arm-linux-androideabi-gcc: error trying to exec 'cc1': execvp: No such file or directory
make[1]: *** [cryptlib.o] Error 1
make[1]: Leaving directory `/home/abhiram/fips/openssl-fips-1.2.3/crypto'
make: *** [build_crypto] Error 1当我执行“查找”时,cc1可执行文件出现在这个特定的目录中。
find . -name cc1
./toolchains/mipsel-linux-android-4.4.3/prebuilt/linux-x86/libexec/gcc/mipsel-linux-android/4.4.3/cc1
./toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/cc1
./toolchains/x86-4.4.3/prebuilt/linux-x86/libexec/gcc/i686-android-linux/4.4.3/cc1发布于 2012-06-14 03:39:18
看起来问题出在export语句中,路径行中有一个空格,其中应该有一个破折号。更改此设置:
export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi 4.4.3/prebuilt/linux-x86/bin";要这样做:
export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin";此外,您的查找结果显示cc1可执行文件不在路径中,因此还要将其位置添加到路径导出中:
export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin":"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/";发布于 2014-02-15 23:47:44
现在我正在尝试为Android构建fips-openssl模块,为此,我为环境变量创建了一个用于交叉编译的脚本。
如果你感兴趣,OpenSSL提供了一个适用于安卓系统的脚本。你可以在OpenSSL维基上找到它:FIPS Library and Android。
在执行make时,我得到的错误是:
arm-linux-androideabi-gcc: error trying to exec 'cc1'
看起来你的PATH没有包含交叉编译工具链。
你是如何调用脚本的?您需要包括一个前导点(".")以确保更改应用于当前shell (而不是执行脚本的子shell(它只是退出))。
这里是OpenSSL的Android构建过程的第一步,位于FIPS Library and Android。请注意前导圆点:
$ . .setenv-android.sh运行脚本的结果设置了OpenSSL构建系统使用的一组变量:
$ . ./setenv-android.sh
ANDROID_NDK_ROOT: /opt/android-ndk-r9
ANDROID_EABI: arm-linux-androideabi-4.6
ANDROID_API: android-14
ANDROID_SYSROOT: /opt/android-ndk-r9/platforms/android-14/arch-arm
ANDROID_TOOLCHAIN: /opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin
FIPS_SIG:
CROSS_COMPILE: arm-linux-androideabi-
ANDROID_DEV: /opt/android-ndk-r9/platforms/android-14/arch-arm/usr"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/“
我不认为这是必要的。
导出ANDROID_NDK="~/Android/android-ndk-r8“
根据Android NDK用户列表上的人的说法,你应该同时设置ANDROID_NDK_ROOT和ANDROID_SDK_ROOT。各种NDK和SDK工具都使用这些环境变量。我认为对于您的安装,SDK值应该是"~/Android/android-sdk"。
详情请参见Recommended NDK Directory?。
我也认为你应该使用ANDROID_SYSROOT。它不被NDK或SDK工具使用;相反,它由OpenSSL使用,并在编译过程中作为sysroot传递。
https://stackoverflow.com/questions/11003769
复制相似问题