【问题标题】:Cross compiling "OpenSSL" Error交叉编译“OpenSSL”错误
【发布时间】:2013-12-09 11:43:25
【问题描述】:

我在我的 c 代码中使用了 include: 。当我用“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 库?

我开始进行交叉编译,对此我知之甚少。 感谢您的宝贵时间!

【问题讨论】:

  • 您找到解决方案了吗?我也碰到过这个问题。我希望你能找到答案,因为它已经 9 个月大了。如果您找到解决方案,请回答。
  • 在容器下编译同样的问题 (Linux 4.13.13-6-pve #1 SMP PVE 4.13.13-42 (Fri, 9 Mar 2018 11:55:18 +0100) x86_64 GNU/Linux )。

标签: c linux openssl cross-compiling


【解决方案1】:

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

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

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

没有库,你会得到链接器错误,而不是编译器错误。

在这种情况下,编译器不知何故无法定位头文件。因此,请确保提供包含路径。

【讨论】:

  • 我已经在我的 c 代码中提到了包含。我写的包含路径如下:'#include '。我认为我必须将 openssl 库编译为交叉编译?但是我该怎么做呢?
  • 我认为是一个小姐评论
【解决方案2】:

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

我找到的解决方案是使用已安装的交叉编译器手动编译 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文件中提供的说明构建了库(并强制使用特定的交叉编译工具链):

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)进行编译。

希望这会有所帮助。

【讨论】:

  • 您应该考虑为此使用 chroot,因为它会覆盖您系统的 openssl
  • 设置前缀还不够吗?
  • 没有尝试过,但可能就足够了,因为 configure 应该知道在哪里安装
  • 这节省了我的一天,或者我应该说一周。我有一个确切的问题,我需要为 ARM 和 gcc linaro 工具链进行编译,默认情况下没有 openssl 库。
【解决方案3】:

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

apt-get install libssl-dev:i386

【讨论】:

    【解决方案4】:
    sudo apt install libssl-dev   
    

    这也适用于一些古怪的 linux 发行版。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-18
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 2016-11-13
      • 1970-01-01
      • 2018-12-08
      相关资源
      最近更新 更多