Как скомпилировать.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 включает в себя?
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.cThe
-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