如何使用OpenSSL編譯.c文件?


Answers

使用-I標誌正確地gcc。

gcc -I/path/to/openssl/ -o Opentest -lcrypto Opentest.c

-I應該指向包含openssl文件夾的目錄。

Question

我正在嘗試編譯一個包含以下內容的小型.c文件:

#include <openssl/ssl.h>
#include <openssl/rsa.h>
#include <openssl/x509.h>
#include <openssl/evp.h>

在我有.c文件的同一個文件夾中,我有一個/ openssl所有這些文件(以及更多),也在突觸包管理器中,我看到安裝了OpenSSL,我試圖用下面的代碼進行編譯:

gcc -o Opentest Opentest.c -lcrypto

但我總是得到錯誤:

error: openssl/ssl.h: No such file or directory
error: openssl/rsa.h: No such file or directory
error: openssl/x509.h: No such file or directory
error: openssl/evp.h: No such file or directory

我想要編譯的文件只是一個.c文件,沒有Makefile或./configure。

我已經嘗試過了:

env CFLAGS=-I/path/to/openssl/

並試圖再次編譯,但我得到相同的錯誤。

我應該怎麼做才能用openssl進行編譯?




如果OpenSSL頭文件位於當前目錄的openssl子目錄中,請使用:

gcc -I. -o Opentest Opentest.c -lcrypto

預處理器將在-I選項中的“ . ”中創建一個名稱,例如“ ./openssl/ssl.h ”,並在尖括號中指定名稱。 如果你用雙引號指定了名字( #include "openssl/ssl.h" ),你可能永遠不需要問這個問題; Unix上的編譯器通常會自動在當前目錄中搜索用雙引號括起來的頭文件,但對於包含在尖括號( #include <openssl/ssl.h> )中的頭文件不會這樣做。 它是實現定義的行為。

你不會說OpenSSL庫在哪裡 - 你可能需要添加一個適當的選項和參數來指定,比如' -L /opt/openssl/lib '。




您需要包含庫路徑(-L / usr / local / lib /)

gcc -o Opentest Opentest.c -L/usr/local/lib/ -lssl -lcrypto

這個對我有用。