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

使用openssl 写一个加密的C程序,编译提示找不到头文件openssl/*.h
问题我为了说明详细,分成3点,有点长,请耐心看一下。环境是在unbuntu下面,下载解压安装好之后,开始写一个AES加密的C代码。
1.代码很简单,代码开始处要包含头文件,我不知道为什么包含的是openssl/aes.h这种格式的头文件,在/usr/local/include/openssl或者是/usr/include/openssl,甚至是解压的openssl-1.0.1g的包的include里面,根本就没有这种openssl/*.h头文件!
包含的头文件都是如aes.h的这种*.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
没这个头文件,根据1我就纳闷了,当然没这个头文件咯?
然后查了好多资料,什么定位include啊,安装libssl-dev啊,都没用,最后我把openssl/aes.h改成aes.h,这个错误没了,来了一个新的错误:fatal error:openssl/opensslconf.h No such file or directory #include
当时我就暴走了,就还是1里面的问题啊,include里面全是*.h的头文件,根本不是openssl/*.h啊!为什么他们要用openssl/*.h这种格式啊?不解啊!
忙了两天了。一直卡在这里,求帮忙啊,openssl也是刚用,东平西凑找资料,求帮忙!不胜感激!
除了前面的之外,真心推荐看一下有没有`openssl-devel`这样的软件包可供安装。`sudo apt-get update && apt-cache search openssl-devel`。
Debian和它的子孙们的拆包都是丧心病狂的。
2014-05-07
1、openssl有aes.h这个头文件,不知道你是不是下错了,建议你去官网,我前几天下载的,有这个东西,见截图:
ubuntu下使用openssl 写一个加密的C程序,编译提示找不到头文件openssl/*.h

2、要链接openssl可以使用-lopenssl,或者链接自己编译完成的库。crypto这个库也是可以用的。
3、不知道你是不是把二进制库和编译库弄混了,下载openssl1.0.1g代码,解压,configure一下,然后make,然后make install才是可用的。另外,有些时候Linux默认的链接位置上没有这个库,需要改变LD_LIBRARY_PATH这个环境变量才能正确链接。或者用-I方式(大写的i)指定要include的路径。
2014-05-06
我们在 c 程序中写 #include <xxx.h> 的时候,xxx.h 的默认位置在 /usr/include 下面。如果我们要包含 /usr/include/abc/yyy.h,那么我们要写成 #include <abc/yyy.h>。如果这两个文件在 /usr/local/include 底下,我们在编译的时候还要加上 -I/usr/local/include 这个选项。
2014-05-06
  1. 一般系统自带的openssl的头文件位于/usr/include/openssl/里,gcc编译器在找头文件时会默认搜索系统位置/usr/include。如果是使用#include <aes.h>这种形式,会出现无法找到头文件的情况,所以使用#include <openssl/aes.h>这种形式。当然,对于前一种形式,也可以用-I选项以指定额外的头文件搜索路径。
  2. -L/usr/local/bin,-L是指定链接是库文件的搜索路径的,一般库文件不会放在/usr/local/bin下,所以你得确定这里是否有问题。另外你似乎混淆了编译和链接的概念,建议将编译和链接两个步骤分开做,也许会更清晰一些。
  3. 安卓移植什么的就不懂了。。
如果代码完全是自己写的,是先弄一个最小的版本把编译和链接搞清楚。第二点中没有-lopenssl就可以编译、链接和执行,是否意味着你的代码中实际上没有调用openssl的库函数?
2014-05-06
你可以尝试这么做:
sudoapt-getremoveopenssllibssl-devsudoapt-getinstallopenssllibssl-dev-y
对,就是重装 openssl 和 libssl-dev。
good luck !
2015-07-25
更多相关文章
  • OpenSSL 的 Heartbleed 漏洞的影响到底有多大
    今天在 HackersNews 上看到了这个新闻,票数和讨论都非常多,看起来相当严重:Heartbleed Bug另外有一个测试网站是否受到影响的服务:Test your server for Heartbleed (CVE-2014-0160) (现在长期503)根据页面上的介绍,这个 OpenS ...
  • 老罗的锤子科技对 OpenSSL 基金会捐款 100 万元这件事
    之前挺讨厌老罗这个人,但这个举动真心为老罗鼓掌!注:本文略有删节,并移除了所有的链接.未和谐版请看最后.在"心脏出血" 和罗永浩锤子手机给Openssl 赞助100万元的事情发生很久以后,某网站刊出一篇文章<隐形战友>,用煽情的语言描绘了Openssl项目和其工作人员 ...
  • 最近沸沸扬扬的 OpenSSL"心脏流血"漏洞,影响很大https 与 openssl 的关系到底怎么样? 是不是只要https 就一定是用了openssl协议?如何判断呢?无奈的漏洞修补方法SSL 3.0 Poodle漏洞修复方法谷歌于本周二披露了一个存在于 SSL 3.0 版 ...
  • Robin Seggelmann 和 Stephen Henson 是否应当为 OpenSSL 的 Heartbleed 漏洞造成的损失承担法律责任
    OpenSSL的日志显示,在程序代码中引入高危漏洞Heartbleed的责任人是德国程序员Robin Seggelmann.他在接受采访时表示,错误是无心之过,不是有意加入的.2011年新年前夕,他向OpenSSL项目递交了一系列bug修正和新增功能.但其中一个功能,他忘记去验证一个长度的变量.代码 ...
  • 删除和任何操作都提示 rm: openssl: Operation not permitted求unix大神,告知其实是自从OS X 10.11的El Captain开始引入的一个系统安全功能,叫做系统完整性保护,英文是System Integrity Protection,简称SIP,具体的官方说 ...
  • openSSL就是经常出漏洞那个,上次heartbleed把全球都坑了.libreSSL是OpenBSD的开发者对openSSL长期以来对安全的漠视感到愤怒,fork的版本,致力于清理芜杂的遗留代码,加强安全性,面向现代的计算环境.个人感觉罗永浩高调给openSSL捐款其实是搞错了方向(如果open ...
  • CentOS 7.0 升级OpenSSL
    CentOS 7.0默认安装的openssl为OpenSSL 1.0.1e-fips 11 Feb 2013,而此版本有漏洞需要升级!工具/原料CentOS 7.0OpenSSL升级源码方法/步骤查看OpenSSL版本号openssl version从官网下载openssl源码包上传openssl到 ...
  • 在问题有哪些游戏引擎的源码值得一读?有前辈提到Cocos2d-x的代码质量不好.究竟是那方面需要改进呢?1. API兼容问题1.x和2.x:早期版本的cocos2d-x API是跟随cocos2d-iphone同步的.也就是说,当时目标方便已有的cocos2d-iphone游戏移植出cocos2d- ...
一周排行