2016-07-31 146 views
0

我用Raspberry Pi的C编写了一个简单的加密程序。它成功编译为我的X86 CPU与gcc encoder.c -lcrypto -o编码器(我安装了libssl-dev),但是当我想交叉编译它(使用arm-linux-gnueabihf-gcc)时,此错误发生:交叉编译openssl C应用时出错

$ 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. 

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

+0

最简单的方法可能是通过SSH进入RPI并直接操作设备。默认凭证是用户名***'pi' ***和密码***'树莓***'。否则,您需要设置交叉编译的shell环境。您需要将工具链和标题放在路径上,并且需要设置一些变量,例如'CROSS_COMPILE'。检出[配置脚本]中的注释(http://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/Configure)。 – jww

+0

谢谢。正如你所建议的那样,我不能直接将armhf软件包安装到x86系统中。这是一个类似的问题和理由:http://superuser.com/questions/1080869/how-do-i-download-a-debian-arm-package-from-another-computer – SAP

+0

你需要直接访问设备本地构建或您需要交叉编译。如果您无法通过SSH连接到设备并且无法使用适当的工具链进行交叉编译,那么您无法为该设备构建程序。 – jww

回答

0

你最大的问题是你的交叉编译器试图使用build(和你的x86机器一样)头文件,它也会很乐意尝试在链接时使用错误的库(当然还有链接失败)。很长一段时间有--sysroot option可以解决这个问题,你只需要为目标机器正确设置sysroot,并且如果你已经有了交叉编译器的机会,你是否已经有了一些sysroot。你只需要知道正确的路径(根据你在哪里以及如何安装交叉编译器),编译和安装openssl本身(交叉编译openssl不好玩,顺便说一下),然后你就可以交叉编译一些东西openssl为你的Pi。

正如已经指出的意见,建立在设备上是比较容易的方式,但皮是缓慢的,所以有选择—易于安装和缓慢的基础上PI或比较硬的交叉编译设置和快速构建在x86机。

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

+0

你是绝对正确的亲爱的罗马希姆莫夫。我通过将必要的文件与-L&-I一起传输到我的电脑来解决此问题。你提出更好的解决方案。但是,我真的很困惑。由于“libc6-dev-armel-cross”包,我可以用-sysroot选项交叉编译简单的c代码。为什么我不能在这种情况下使用这种交叉包? – SAP

+0

@SAP:也许有些事我不知道Debian交叉工具链,从来没有实际使用过。看看[在这个问题](http://stackoverflow.com/questions/17603213/cross-compilation-gcc-ignores-sysroot),也许它接近你的特定情况。 –