在unbuntu下使用openssl 写一个加密的C程序,编译提示找不到头文件openssl/*.h
问题我为了说明详细,分成3点,有点长,请耐心看一下。环境是在unbuntu下面,下载解压安装好之后,开始写一个AES加密的C代码。1.代码很简单,代码开始处要包含头文件:...
问题我为了说明详细,分成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也是刚用,东平西凑找资料,求帮忙!不胜感激! 展开
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也是刚用,东平西凑找资料,求帮忙!不胜感激! 展开
2个回答
展开全部
哥门 <openssl/aes.h> 里 的openssl只是文件夹名字而已,
在linux下面 /usr/local/include/ /usr/include/ 这两个路径是默认引用的。
所以你没加 -I 也是可以编译的 。
当交叉编译时,那就完全不一样了,必须配置好所有路径。
在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也一样。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询