将openssl库添加到我的项目中,找不到错误'openssl / ossl_typ.h'文件

时间:2017-07-18 10:33:17

标签: c openssl

我安装了openssl-1.1.0f并将库添加到我的源代码中。

myProject (Folder)
- myApp (Folder)
  - myApp.c
- openssl-1.1.0f (Folder)

在我的源代码myApp.c中,我在下面添加了:

#include "../openssl-1.1.0f/include/openssl/rand.h"
#include "../openssl-1.1.0f/include/openssl/ssl.h"

我编译了。

gcc -Wall -Wextra -Werror -static -o myApp myApp.c -L../openssl/openssl-1.1.0f/ -lssl -lcrypto -I../openssl/openssl-1.1.0f/include

我收到了错误。

../../openssl-1.1.0f/include/openssl/rand.h:14:11 fatal error 'openssl/ossl_typ.h' file not found

但是openssl-1.1.0f / include / openssl中有ossl_typ.h文件。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您错误地包含了这些文件。您需要使用-I选项告诉编译器openssl的包含文件的位置。

目前您正在告诉它要查看" ../ openssl / openssl-1.1.0f / include /"这个文件夹不存在是错误的。根据文件夹布局,它应该是" -I ../ openssl-1.1.0f / include /"。然后,当您包含文件时,您不需要指定完整路径,因为编译器将能够看到它们。

#include "openssl/rand.h"
#include "openssl/ssl.h"

在这些文件中,包括" openssl / ossl_typ.h"如果你告诉它正确的地方,它现在能够找到它。

答案 1 :(得分:0)

我认为你可以做的最好的事情,因为openssl-1.1.0f包使用include目录来添加

CFLAGS += "-I<pathToOpenSSlParentDir>/openssl-1.1.0f/include"

到您的Makefile,然后

...
#include <openssl/rand.h>
#include <openssl/ssl.h>
...

在您要编译的文件中。或者您可以更好地在系统中安装openssl作为默认设置,然后一切都将按预期工作。

我的最后一段的原因是,如果您将openssl编译为共享库,那么您必须添加LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:<pathToOpenSSlParentDir>/openssl-1.1.0f/build或类似的东西,以便运行时能够在运行时找到它们。您可以避免此问题强制链接静态链接,但代价是更大的可执行文件和运行时在内存中加载的库的多个实例。