2013-11-24 219 views
8

我在我的c代码中使用include:< openssl/md5.h>。当我与“海湾合作委员会”编译它的编译器,我没有任何错误,但是当我用交叉编译器编译“在arm-linux的-gnueabi-gcc的”我有以下错误:交叉编译“OpenSSL”错误

/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库?

我开始交叉编译,而且我对此没有太多的了解。 感谢您的时间!

+0

您是否找到解决方案?我也碰到了这个问题。我希望你在9个月大的时候找到答案。如果你找到解决方案,然后回答它。 – neckTwi

回答

0

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

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

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

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

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

+0

我已经提到了包含在我的c代码中。我写的include路径如下:'#include '。我认为我必须编译openssl库到交叉编译?但我怎么能做到这一点? – user2984715

+0

我认为这是一个小姐comentary – delive

8

我知道这个问题有点旧了,但是因为我遇到了同样的问题,所以我将在此留待以供将来参考。

我发现的解决方案是使用安装的交叉编译器手动编译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)。

希望这会有所帮助。

+0

你应该考虑使用一个chroot这一点,因为它会覆盖系统的OpenSSL的 – h0ru5

+0

不会设置前缀够吗? –

+0

还没有尝试过,但可能是因为不够配置应该知道在哪里安装 – h0ru5