2017-07-18 42 views
0

我安裝了openssl-1.1.0f並將庫添加到我的源代碼中。將openssl庫添加到我的項目中,發現錯誤'openssl/ossl_typ.h'文件未找到

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

您必須運行'Configure'來生成一些特定於安裝的文件。你是否這樣做? – jww

+0

我做到了 - 通過INSTALL指南配置,製作和安裝。我沒有改變'openssl-1.1.0f'文件夾中的任何內容。 – user712390

回答

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」它現在就可以,如果你告訴它來尋找合適的地方找到的文件。

+0

這是我下載並安裝的'openssl-1.1.0f'文件夾。我不想更改openssl開源文件夾。 – user712390

+0

你並沒有改變文件夾,你正在把正確的道路。我已經改變了我的答案,希望更清楚嗎? –

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或類似的東西,以便運行時能夠在運行時找到它們。您可以避免強制與靜態鏈接關聯的問題,但是會以運行時在內存中加載的較大的可執行文件和多個庫實例爲代價。

相關問題