致命错误:openssl/evp.h文件或目录不存在

11

我使用Android NDK编译了OpenSSL,.so文件已经成功构建。

我正在尝试将已构建的.so文件“包含”到一个Android项目中。

在以下这行代码中出现了一个错误:

#include "openssl/evp.h"

fatal error: openssl/evp.h: No such file or directory compilation terminated. make: * [obj/local/armeabi/objs/iedemo/anotherdemo.o] Error 1

然而,我已经包含了stdio.h和string.h文件。

我探索了/usr/include/openssl目录,发现所有与OpenSSL相关的.h文件都在这里。并且,stdio.h和string.h文件位于/usr/include目录下。

我已经安装了libssl-dev软件包。命令是(sudo apt-get install libssl-dev)。

请帮帮我!

5个回答

18
遇到这个问题时,在Debian或Ubuntu上,可以用以下命令解决:apt-get install libssl-dev

3
对于像我这样使用Windows操作系统的人,如果以上解决方案不能解决问题,可以尝试以下解决方案:
我从官方网站下载了OpenSSL可执行文件,并选择包含以下行的描述文件(由OpenSSL的创建者推荐软件开发人员使用)。在编写此解决方案时,文件版本为(Win64 OpenSSL v3.0.0),可以直接从以下链接下载。
以下是更详细说明的图像:
enter image description here 然后,我执行了以下步骤:
  1. 从.exe文件安装OpenSSL。
  2. 复制bin文件夹目录路径(在我的情况下是C:\Program Files\OpenSSL-Win64\bin)并将其添加到系统环境变量中。
  3. 复制include文件夹目录路径(在我的情况下是C:\Program Files\OpenSSL-Win64\include)并将其添加到系统环境变量中。
然后编译使用openssl库和头文件的源代码,它们应该可以无错误地编译。

1
你的Android.mk应该指定openssl包含目录(不是/usr/include/openssl,而是与使用NDK构建Android文件的文件相对应的目录)。类似于以下内容:
LOCAL_C_INCLUDES += /home/Charan/openssl/include

但是你还需要指定你已构建的 .so 文件的路径,并确保它们与你的应用程序正确部署。有时会出现混乱的情况,但幸运的是我们有一个可行的示例:Android NDK 中使用 OpenSSL 的问题


是的,Alex,你说得对。我也是用同样的方法(实际上是试错法)完成的。我还将要包含的文件复制到了工作区,并指定了.so文件的路径。很容易搞砸... - Charan

1
我在使用PECL构建PHP包时遇到了这个问题,并成功将头文件作为openssl-devel的一部分进行安装。
在CentOS/RHEL上: yum install openssl-devel 在Ubuntu/Debian上: apt-get install openssl-devel

3
无法找到 openssl-devel 软件包。 - Simon Baars

0
要解决这个错误:E: 无法找到软件包 openssl-devel 你需要在开头加上 sudo sudo apt-get install openssl-devel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接