针对嵌入式系统,将openssl与特定版本的glibc进行交叉编译



我正在尝试以fips模式编译Openssl。我已经编译了fips模块/容器,在编译openssl时使用它。一切似乎都正常,但当我将openssl二进制文件移到目标平台(arm)上时,一切都崩溃了。它抱怨它没有正确的glibc版本,因为目标平台(arm)上的glibc的版本是2.12.2,而构建主机(i386-ubuntu)上的格利bc的版本却是2.15。我可以手动将较新版本的glibc添加到嵌入式目标平台,然后openssl就会工作,但嵌入式linux系统的其他部分会因为不同的glibc而中断。

我需要能够根据glibc的2.12.2版本编译openssl,这样当我将其移动到目标时,它仍然可以工作。

~ # openssl version
openssl: /lib/libc.so.6: version `GLIBC_2.15' not found (required by openssl)

这是我在主机上运行的编译代码

make clean
export TARGETMACH=arm-none-linux-gnueabi
export BUILDMACH=i686-pc-linux-gnu
export CROSS=arm-linux
export TOOLCHAIN_DIR=/usr/local/DigiEL-5.9/x-tools/arm-cortex_a8-liunx-gnueabi/
export PATH=/usr/local/DigiEL-5.9/x-tools/arm-cortex_a8-linux-gnueabi/bin/:$PATH
export MACHINE=armv71
export RELEASE=3.2.0
export SYSTEM=Linux
export ARCH=arm
export CROSS_COMPILE="arm-linux-gnueabi-" 
export FIPS_SIG=$PWD/util/incore
export HOSTCC=gcc
export CFLAGS="-I/usr/local/ssl-1.0.2/include"
export LDFLAGS="-L/usr/local/DigiEL-5.9/x-tools/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/lib -R/usr/local/DigiEL-5.9/x-tools/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/lib"
export FIPSDIR=/home/autosol/CMApps/AppsWeCompile/fipsOpenSSL/install/
./config fips shared --openssldir=/home/autosol/CMApps/AppsWeCompile/compiledApps/openssl/usr --with-fipsdir=/home/autosol/CMApps/AppsWeCompile/fipsOpenSSL/install
make depend
make
make install

我尝试过没有共享,这没有帮助,但确实创建了一个更大的二进制文件。我尝试过设置ld_library,这会导致seg错误。

~#LD_LIBRARY_PATH=/mnt/mtd6part/free/lib/openssl分段故障

欢迎任何建议!

终于发现了它是什么。我的构建系统上有两个不同的交叉编译器,一个是针对某些东西编译的,另一个是openssl针对的较新编译器。因此,新版本有glibc的lib2.15和旧版本2.12.2。最好只是在你的系统中搜索libc,你会发现你是否有另一个版本。

我删除了更新的版本,还发现我必须更新我的配置选项

在export CROSS_COMPILE="arm-cortex_a8-linux-gnueabi-"在配置之前,这个命令告诉它使用旧选项所在的digi-dir中的二进制文件export CROSS_COMPILE="arm linux gnueabi-"告诉它使用新的交叉编译器

也许这会对某人有所帮助。

最新更新