Запуск кода C с открытым SSL - PullRequest
2 голосов
/ 13 апреля 2011

Я не могу скомпилировать следующий код.Я запускаю его в MACOSX с помощью следующей команды в терминале:
$ gcc filename.c -lssl

Я понимаю, что MACOS уже имеет встроенный openssl (который я могу вызвать как команду в терминале).Но я не уверен, правильно ли я связываю его с библиотекой.

#include <stdio.h>
#include <openssl/evp.h>
main(int argc, char *argv[])
{
EVP_MD_CTX mdctx;
const EVP_MD *md;
char mess1[] = "Test Message\n";
char mess2[] = "Hello World\n";
unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;

OpenSSL_add_all_digests();

if(!argv[1]) {
    printf("Usage: mdtest digestname\n");
    exit(1);
}

md = EVP_get_digestbyname(argv[1]);

if(!md) {
    printf("Unknown message digest %s\n", argv[1]);
    exit(1);
}

EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
EVP_MD_CTX_cleanup(&mdctx);

printf("Digest is: ");
for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
printf("\n");
}

Моя ошибка:
Неопределенные символы: "_EVP_MD_CTX_cleanup", на которые ссылается: _main in ccfZG7WJ.o
ld: символ (ы) не найдены collect2: ld вернул 1 состояние выхода

Я удивлен этой ошибкой, поскольку вместо «Заголовочный файл не найден» отображается «Неопределенные символы».Не могли бы вы помочь мне отладить эту проблему.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 13 апреля 2011

OpenSSL имеет 2 библиотеки: libssl и libcrypto.Также включите libcrypto.

gcc filename.c -lssl -lcrypto

(для этой программы вам вообще не нужно -lssl, но включать ее не помешает)

libssl - для создания реальных соединений SSL или TLS, например, при подключении к веб-серверу по протоколу https.Он также экспортирует SSL_load_error_strings, что полезно даже при работе только с библиотекой криптографии.

libcrypto - библиотека криптографии.Он имеет алгоритмы шифрования, функции генерации и проверки ключей и сертификатов, алгоритмы аутентификации сообщений и т. Д.

1 голос
/ 13 апреля 2011

Вы правы, подозревая, что библиотека неправильно связана.Существует две возможности:

  • библиотека не связана вообще
  • библиотека, к которой подключена библиотека, не содержит этот символ, что указывает на несовпадение версий.

Второй кажется более вероятным, но первый легче проверить.man -k ssl должен указывать на справочные страницы библиотеки.

0 голосов
/ 13 апреля 2011

Скорее всего, в вашем случае «неопределенные символы» означает, что вы не связываете нужную библиотеку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...