【问题标题】:Error while cross compiling an openssl C cpplication交叉编译 openssl C 应用程序时出错
【发布时间】:2016-07-31 12:31:48
【问题描述】:

我用 C 语言为 Raspberry Pi 编写了一个简单的加密程序。它使用 gcc encoder.c -lcrypto -o encoder 成功为我的 X86 CPU 编译(我安装了 libssl-dev),但是当我想交叉编译它时(使用 arm-linux-gnueabihf- gcc),就会出现这个错误:

$ arm-linux-gnueabihf-gcc encoder.c -lcrypto -o encoder
    In file included from ./encoder.c:4:0:
    /usr/include/openssl/aes.h:55:33: fatal error: openssl/opensslconf.h: No such file or directory
    #include <openssl/opensslconf.h>
                                       ^
    compilation terminated.

如何为 Raspberry Pi 交叉编译 openssl C 应用程序?

【问题讨论】:

  • 最简单的方法可能是通过 SSH 进入 RPI 并直接从设备工作。默认凭据是用户名 pi 和密码 raspberry。否则,您需要为交叉编译设置 shell 环境。您需要将工具链和标题放在路径上,并且需要设置一些变量,例如CROSS_COMPILE。查看Configure script中的cmets。
  • 谢谢。正如你所建议的,我不能将 armhf 包直接安装到 x86 系统中。这是一个类似的问题和理由:superuser.com/questions/1080869/…
  • 您需要直接访问设备以进行本机构建,或者您需要交叉编译。如果您无法通过 SSH 连接到设备并且无法使用适当的工具链进行交叉编译,那么您就无法为设备构建程序。

标签: openssl raspberry-pi cross-compiling


【解决方案1】:

您最大的问题是您的交叉编译器尝试使用构建(如在您的 x86 机器中)头文件,并且在链接时它也会很乐意尝试使用错误的库(当然,链接失败) .很长一段时间以来,--sysroot option 正好解决了这个问题,您只需要为您的目标机器正确设置 sysroot,如果您已经有交叉编译器,那么您确实已经有一些 sysroot。您只需要知道正确的路径(基于交叉编译器的安装位置和方式),编译和安装 openssl 本身(交叉编译 openssl 并不好玩,顺便说一句),然后您就可以使用为您的 Pi 使用 openssl。

正如在 cmets 中已经提到的,在设备上构建要容易得多,但 Pi 很慢,所以有一个选择 - 在 Pi 上轻松设置和缓慢构建,或者在 x86 机器上相对困难的交叉编译设置和快速构建.

作为替代方案,您可以尝试使用专门的交叉编译构建环境,例如 OpenEmbedded、BuildRoot 或 OpenWRT,但这对于一个简单的程序来说也可能是一种矫枉过正。

【讨论】:

  • 你说得对,亲爱的 Roman Khimov。我通过将必要的文件与 -L 和 -I 一起传输到我的 PC 中解决了这个问题。你提出了一个更好的解决方案。然而,我真的很困惑。由于“libc6-dev-armel-cross”包,我可以在没有 --sysroot 选项的情况下交叉编译一个简单的 c 代码。为什么我不能在这种场景下使用这样的跨包?
  • @SAP:也许有一些关于 Debian 跨工具链的东西我不知道,但从未真正使用过。看看at this question,可能和你的具体情况比较接近。
猜你喜欢
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
相关资源
最近更新 更多