在unbuntu下使用openssl 写一个加密的C程序,编译提示找不到头文件openssl/*.h

问题我为了说明详细,分成3点,有点长,请耐心看一下。环境是在unbuntu下面,下载解压安装好之后,开始写一个AES加密的C代码。

1.代码很简单,代码开始处要包含头文件:#include <openssl/aes.h>

我不知道为什么包含的是种格式的头文件,在/usr/local/include/openssl或者是/usr/include/openssl,甚至是解压的openssl-1.0.1g的包的include里面,根本就没有这种openssl/*.h头文件!包含的头文件都是如aes.h的这种*.h头文件,为什么编程时要用这种openssl/*.h的头文件,根本没有啊!

2.
但是之后编译时,gcc -o enc enc.c -L/usr/local/bin -lcrypto
我包含这个libcrypto库,注意这里我没有用-I/usr/include/openssl来定位头文件位置,竟然奇迹般地编译过了,即便我使用
codeblocks也是不需要定位include位置,只要告诉它crypto位置即可编译过去,当然运行起来完全正常。这不是很奇怪(结合1来看)

3.
其实我是搞安卓移植,之后我用arm-none-linux-guneabi-gcc来交叉编译,参数格式完全没变,只是换个arm的编译器哎,问题就来
了,提示:fatal error:openssl/aes.h :No such file or directory
#include<openssl/aes.h>
没这个头文件,根据1我就纳闷了,当然没这个头文件咯?


后查了好多资料,什么定位include啊,安装libssl-dev啊,都没用,最后我把openssl/aes.h改成aes.h,这个错误没了,来
了一个新的错误:fatal error:openssl/opensslconf.h No such file or directory
#include<openssl/opensslconf.h>

当时我就无语了,就还是1里面的问题啊,include里面全是*.h的头文件,根本不是openssl/*.h啊!为什么他们要用openssl/*.h这种格式啊?不解啊!

忙了两天了。一直卡在这里,求帮忙啊,openssl也是刚用,东平西凑找资料,求帮忙!不胜感激!

哥门 <openssl/aes.h> 里 的openssl只是文件夹名字而已,
在linux下面 /usr/local/include/ /usr/include/ 这两个路径是默认引用的。
所以你没加 -I 也是可以编译的 。
当交叉编译时,那就完全不一样了,必须配置好所有路径。追问

原来是文件夹名字啊。。。
那就是-I/usr/local/include才正确定位咯?

然后提示:arm-none-linux-gnueabi/bin/ld: cannot find -lcrypto cannot find -lssl
这是啥情况啊?感觉我好像啥都不会了。。

追答

那个的意思是 你必须有libcrypto.a arm的包,并且正确定位。
就像你在linux下定位: -L/usr/local/bin -lcrypto 一样。
那个-lssl也一样。

追问

这个libcrypto.a arm的包是不是也要用arm-linux-gcc交叉编出来,然后才能在编译时链接使用啊?直接用ubuntu下面的那个libcrypto.a是不行的?所以提示No such file or directory?

追答

是的 ,你可以到网上找现成的包,也可以下载源码自己编译。
你程序引用的所有的包都要分linux和arm版。
交叉编译有点麻烦的,需要点耐心。。

追问

好,谢谢啦!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-06-19
想知道你最后怎么解决的,目前也是这个原因,找不到aes.h这个文件。网上资料又少。
相似回答