交叉编译“OpenSSL”错误

时间:2013-11-24 21:41:00

标签: c linux openssl cross-compiling

我正在使用include:< openssl / md5.h>在我的C代码中。当我用“gcc”编译器编译它时我没有任何错误,但是当我用交叉编译器“arm-linux-gnueabi-gcc”编译它时,我有以下错误:

/usr/include/openssl/e_os2.h:56:33: fatal error: openssl/opensslconf.h: No such file or directory 
compilation terminated.

我认为这个错误是因为我在交叉编译器文件夹“/ usr / arm-linux-gnueabi-gcc”中没有openssl库。

有谁能说我这是错误的原因吗?我如何为交叉编译器安装openssl库?

我开始进行交叉编译,而且我对此并不了解。 谢谢你的时间!

4 个答案:

答案 0 :(得分:11)

我知道这个问题有点老了,但是既然我遇到了同样的问题,我将把它留在这里以供将来参考。

我找到的解决方案是使用已安装的交叉编译器手动编译OpenSSL,然后手动将其安装到交叉编译库文件夹中。

首先,我安装了交叉编译器(我正在使用Ubuntu 14.04)。我安装了C编译器和C ++编译器。我还安装了两个交叉编译工具链,一个具有硬浮点支持(arm-linux-gnueabihf),另一个没有(arm-linux-gnueabi)。创建了两个目录(如问题所述)/usr/arm-linux-gnueabi/usr/arm-linux-gnueabihf,其中应安装交叉编译的库。

sudo apt-get install {gcc,g++}-arm-linux-gnueabi{,hf}

其次,克隆了OpenSSL Git存储库并检出了我感兴趣的版本(1.0.2):

git clone https://github.com/openssl/openssl
git checkout OpenSSL_1_0_2       # or another version

然后,我为交叉编译配置了环境并更改了安装目录(前缀),并按照INSTALL文件中提供的说明构建了库(并强制使用特定的交叉编译工具链): / p>

export CROSS=arm-linux-gnueabi # or arm-linux-gnueabihf
export AR=${CROSS}-ar
export AS=${CROSS}-as
export CC=${CROSS}-gcc
export CXX=${CROSS}-g++
export LD=${CROSS}-ld

./Configure --prefix=/usr/${CROSS} os/compiler:${CC}
make
sudo make install

您可以重复此过程并使用两个工具链进行编译(arm-linux-gnueabiarm-linux-gnueabihf)。

希望这有帮助。

答案 1 :(得分:1)

在我的情况下,完全相同的错误消息(但我在64位机器上编译32位)。 我通过安装另一个架构解决了这个问题:

apt-get install libssl-dev:i386

答案 2 :(得分:0)

为特定平台构建的库将用于特定平台,并且只有在其二进制文件兼容时才能在其他平台上使用。

对于交叉编译,您可能也需要不同平台的二进制文件。

关于此错误,似乎您没有提到OpenSSL头文件的包含路径。

没有库,您将收到链接器错误,而不是编译器错误。

在这种情况下,编译器无法以某种方式找到头文件。因此,请确保提供包含路径。

答案 3 :(得分:0)

sudo apt install libssl-dev   

这也适用于一些奇怪的Linux发行版。