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



Я пытаюсь скомпилировать небольшой .C файл, который имеет следующее включает в себя:



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


в той же папке, где у меня есть .c файл у меня есть /openssl со всеми этими файлами (и более), Также в Synaptic package manager я вижу 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 или ./формировать.



Я уже пробовал:



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


и попытался скомпилировать снова, но я получаю те же ошибки.



что я должен сделать для компиляции с openssl включает в себя?

854   7  

7 ответов:

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

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

использовать -I флаг gcc правильно.

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

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

мой английский не очень хорошо но я нашел патч для этой проблемы в китайской веб-страницы

yum установить openssl yum install openssl-devel

установите это и tha's it, протестировано в centos 5.4 и keepalived-1.2.7]

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

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

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

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

из openssl.pc file

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 и путь к Libs из этого. Теперь ваш префикс для включаемых файлов -/home/username/Programming . Следовательно, ваш параметр включить файл должен быть -I//home/username/Programming.

(Да, я получил его из комментариев выше)

Это просто для удаления журналов относительно заголовков. Вы также можете предоставить в связи с -lcrypto библиотека.

необходимо включить путь к библиотеке (- L / usr / local / lib/)

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

это работает для меня.

для этой ошибки gcc вы должны ссылаться на документ gcc о пути поиска.

короче:

1) Если вы используете угловые скобки () с #include, gcc будет искать файл заголовка сначала из системного пути, такого как / usr / local / include и / usr / include и т. д.

2) путь, указанный-Lреж параметр командной строки, будет искать перед каталогами по умолчанию.

3)Если вы используйте цитату ("") с #include как #include "file", сначала будет выполнен поиск в каталоге, содержащем текущий файл.

Итак, ответ на ваш вопрос выглядит следующим образом:

1) Если вы хотите использовать заголовочные файлы в папке исходного кода, замените на "" в директиве #include.

2) Если вы хотите использовать параметр командной строки-I, добавьте его в командную строку компиляции.(если установить CFLAGS в переменных среды, он не будет ссылаться автоматически)

3) о конфигурации пакета(openssl.pc), я не думаю, что на него будут ссылаться без явного объявления в конфигурации сборки.

Comments

    Ничего не найдено.