Подтвердить что ты не робот

Как использовать OpenSSL с GCC?

Я пытаюсь использовать openssl в программе gcc, но он не работает.

g++ server.cpp /usr/lib/libssl.a -o server

выводит сообщение об ошибке, как и все с параметром -l. Что я должен ввести в командной строке для связи с openssl? Файл /usr/lib/libssl.a существует, но тем не менее я все еще получаю ошибку компоновщика no such function MD5() exists.

4b9b3361

Ответ 1

Не зная точных ошибок, которые вы видите, трудно найти точное решение. Вот моя лучшая попытка.

Из предоставленной вами информации кажется, что компоновщик не работает, потому что не может найти ссылку на функцию md5 в libssl.a. Я полагаю, что эта функция на самом деле находится в libcrypto поэтому вам может понадобиться указать и эту библиотеку.

g++ server.cpp -L/usr/lib -Lssl -Lcrypto -o server

Ответ 2

Эта статья developerWorks может оказаться полезной вам или другим пользователям.

Он описывает большинство вещей, которые вам нужно знать, чтобы начать работу с OpenSSL и C/C++. Если вы обнаружите, что выполняете большинство одних и тех же шагов, это может помочь вам понять, что нужно делать.

Удачи.


обновление

Примечание: сохраните обе ссылки, потому что они будут использоваться для поиска новых открытий.

Ответ 3

В Eclipse IDE выберите Свойство Project → c/С++ Build → Настройки gcc c linker (из настроек инструмента) → добавить в путь поиска библиотеки (-L)

/usr/lib -lssl -lcrypto

Ответ 4

Местоположение библиотеки не является фиксированным. В моем случае (Ubuntu 18.04) файлы .a находятся в /usr/lib/x86_64-Linux-gnu/. Итак, вот полные шаги:

1) установить библиотеку,

sudo apt install libss-dev

2) проверить установленные файлы,

dpkg-query -L libssl-dev

3) изменить флаги gcc -L(library directory) -L(library name), например,

gcc XXX.c XXXXX.c -L/usr/lib/x86_64-linux-gnu/ -lcrypto -lssl

Ответ 5

В дополнение к принятым ответам я не смог составить компиляцию примера OpenSSL для AES-CCM:

https://github.com/openssl/openssl/blob/master/demos/evp/aesccm.c

Чтобы сделать это, мне нужно было добавить еще две вещи:

  • Библиотека динамической связки: -ldl
  • Библиотека PThread для поддержки потоков POSIX: -pthread (добавление непосредственно библиотеки с помощью -lpthread не рекомендуется)