交叉编译 openssl C cpplication 时出错
Error while cross compiling an openssl C cpplication
我用 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 应用程序?
你最大的问题是你的交叉编译器试图使用构建(就像在你的 x86 机器中一样)头文件,并且当涉及到 linking(和失败 link,当然)。很长一段时间以来,--sysroot
option 正好解决了这个问题,您只需要为您的目标机器正确设置 sysroot,如果您已经有了交叉编译器,那么您可能已经有了一些 sysroot。您只需要知道正确的路径(基于交叉编译器的安装位置和安装方式),编译并安装 openssl 本身(交叉编译 openssl 并不好玩,顺便说一句)然后您就可以交叉编译一些东西为你的 Pi 打开 ssl。
正如评论中已经指出的那样,在设备上构建更容易,但 Pi 很慢,所以有一个选择——简单的设置和在 Pi 上缓慢构建或相对困难的交叉编译设置和快速构建x86 机器。
作为替代方案,您可以尝试使用专门的交叉编译构建环境,如 OpenEmbedded、BuildRoot 或 OpenWRT,但这对于一个简单的程序来说也可能有点矫枉过正。
我用 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 应用程序?
你最大的问题是你的交叉编译器试图使用构建(就像在你的 x86 机器中一样)头文件,并且当涉及到 linking(和失败 link,当然)。很长一段时间以来,--sysroot
option 正好解决了这个问题,您只需要为您的目标机器正确设置 sysroot,如果您已经有了交叉编译器,那么您可能已经有了一些 sysroot。您只需要知道正确的路径(基于交叉编译器的安装位置和安装方式),编译并安装 openssl 本身(交叉编译 openssl 并不好玩,顺便说一句)然后您就可以交叉编译一些东西为你的 Pi 打开 ssl。
正如评论中已经指出的那样,在设备上构建更容易,但 Pi 很慢,所以有一个选择——简单的设置和在 Pi 上缓慢构建或相对困难的交叉编译设置和快速构建x86 机器。
作为替代方案,您可以尝试使用专门的交叉编译构建环境,如 OpenEmbedded、BuildRoot 或 OpenWRT,但这对于一个简单的程序来说也可能有点矫枉过正。