Я пытаюсь скомпилировать маленький.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 файлом, не имеет Make-файла или./настраивать.
Я уже попробовал:
env CFLAGS=-I/path/to/openssl/
и попробованный для компиляции снова, но я получаю те же ошибки.
То, что я должен сделать для компиляции с openssl, включает?
Пути включения указывают, что вы должны компилировать систему , установленную OpenSSL системы. У вас не должно быть файлов .h
в каталоге вашего пакета - он должен забирать их из / usr / include / openssl
.
Простой пакет OpenSSL ( libssl
) не включает файлы .h
- вам также необходимо установить пакет для разработки. Он называется libssl-dev
в Debian, Ubuntu и подобных дистрибутивах и libssl-devel
в CentOS, Fedora, Red Hat и подобных.
Если заголовки OpenSSL находятся в подкаталоге openssl
текущего каталога, используйте:
gcc -I. -o Opentest Opentest.c -lcrypto
Препроцессор пытается создать имя, такое как « ./ openssl / ssl .h
"из" .
"в опции -I
и имя, указанное в угловых скобках. Если бы вы указали имена в двойных кавычках ( #include "openssl / ssl.h"
), вам, возможно, никогда не пришлось бы задавать вопрос; компилятор в Unix обычно автоматически ищет заголовки, заключенные в двойные кавычки, в текущем каталоге, но не делает этого для заголовков, заключенных в угловые скобки ( #include
). Это поведение, определяемое реализацией.
Вы не говорите, где находятся библиотеки OpenSSL - вам может потребоваться добавить соответствующий параметр и аргумент, чтобы указать это, например, « -L / opt / openssl / lib
».
Из файла openssl.pc
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: OpenSSL
Description: Secure Sockets Layer and cryptography libraries and tools
Version: 0.9.8g
Requires:
Libs: -L${libdir} -lssl -lcrypto
Libs.private: -ldl -Wl,-Bsymbolic-functions -lz
Cflags: -I${includedir}
Вы можете отметить путь к каталогу Include и путь к библиотекам из этого файла. Теперь ваш префикс для включаемых файлов - / home / username / Programming
.
Следовательно, ваш параметр включаемого файла должен быть -I // home / username / Programming
.
(Да, я понял это из комментариев выше)
Это просто для удаления логов, касающихся заголовков. Вы также можете предоставить параметр -L
для связывания с библиотекой -lcrypto
.
Используйте флаг -I
для правильного выполнения gcc.
gcc -I / путь / к / openssl / -o Opentest -lcrypto Opentest.c
-I
должен указывать на каталог, содержащий папку openssl
.