我安装了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文件。
我该如何解决这个问题?
答案 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
或类似的东西,以便运行时能够在运行时找到它们。您可以避免此问题强制链接静态链接,但代价是更大的可执行文件和运行时在内存中加载的库的多个实例。