问题我为了说明详细,分成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也是刚用,东平西凑找资料,求帮忙!不胜感激!
原来是文件夹名字啊。。。
那就是-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版。
交叉编译有点麻烦的,需要点耐心。。
好,谢谢啦!