То, как скомпилировать.c файл с OpenSSL, включает?

Я пытаюсь скомпилировать маленький.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, включает?

67
задан jahmax 30 July 2010 в 04:21
поделиться

4 ответа

Пути включения указывают, что вы должны компилировать систему , установленную OpenSSL системы. У вас не должно быть файлов .h в каталоге вашего пакета - он должен забирать их из / usr / include / openssl .

Простой пакет OpenSSL ( libssl ) не включает файлы .h - вам также необходимо установить пакет для разработки. Он называется libssl-dev в Debian, Ubuntu и подобных дистрибутивах и libssl-devel в CentOS, Fedora, Red Hat и подобных.

100
ответ дан 24 November 2019 в 14:36
поделиться

Если заголовки OpenSSL находятся в подкаталоге openssl текущего каталога, используйте:

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

Препроцессор пытается создать имя, такое как « ./ openssl / ssl .h "из" . "в опции -I и имя, указанное в угловых скобках. Если бы вы указали имена в двойных кавычках ( #include "openssl / ssl.h" ), вам, возможно, никогда не пришлось бы задавать вопрос; компилятор в Unix обычно автоматически ищет заголовки, заключенные в двойные кавычки, в текущем каталоге, но не делает этого для заголовков, заключенных в угловые скобки ( #include ). Это поведение, определяемое реализацией.

Вы не говорите, где находятся библиотеки OpenSSL - вам может потребоваться добавить соответствующий параметр и аргумент, чтобы указать это, например, « -L / opt / openssl / lib ».

4
ответ дан 24 November 2019 в 14:36
поделиться

Из файла 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 .

4
ответ дан 24 November 2019 в 14:36
поделиться

Используйте флаг -I для правильного выполнения gcc.

gcc -I / путь / к / openssl / -o Opentest -lcrypto Opentest.c

-I должен указывать на каталог, содержащий папку openssl .

10
ответ дан 24 November 2019 в 14:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: