Использование переменных #include в функциях void C ++ - PullRequest
0 голосов
/ 21 октября 2018

Я возвращаюсь в C ++ после 15-летнего перерыва и пытаюсь вспомнить, как сделать переменные / функции из #include доступными для функций void.В настоящее время я использую один .cpp, но экспортирую функцию в отдельный .cpp для вызова по мере необходимости.

У меня есть следующее:

// C++
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <errno.h>
#include <cstring>

// OpenSSL
#include <evp.h>
#include <aes.h>
#include <rand.h>
#include <err.h>
#include <buffer.h>

using namespace std;

typedef struct _cipher_params_t {
    unsigned char *key;
    unsigned char *iv;
    unsigned int encrypt;
    const EVP_CIPHER *cipher_type;
}cipher_params_t;

EVP_CIPHER находится вфайл evp.h, но, похоже, он не может его найти.Кажется, мой путь включения работает так, как я вижу / выбираю модули, когда набираю #include <>, и он находит другие переменные в других файлах include (aes.h).

Кроме того, в приведенной ниже функции элементы из evp.h не могут быть не идентифицированы, например EVP_CIPHER_CTX * ctx, даже если они объявлены, в то время как другие элементы разрешены из других включений, таких как err.h.

 void file_encrypt_decrypt(cipher_params_t *params, FILE *ifp, FILE *ofp) {
 /* Allow enough space in output buffer for additional block */
 int cipher_block_size = EVP_CIPHER_block_size(params->cipher_type);
 unsigned char in_buf[BUFSIZE], out_buf[in_buf + cipher_block_size];

 int num_bytes_read, out_len;
 EVP_CIPHER_CTX *ctx;
 :
 :

Я использую Visual Studio 2017 Enterprise с openSSL.Какие-либо предложения?Неправильный параметр в параметрах конфигурации ссылки?

Любые предложения приветствуются!Спасибо Рита.

1 Ответ

0 голосов
/ 22 октября 2018

При настройке проекта Visual Studio для использования сборки OpenSSL SDK вы должны сделать следующее (извините, если имена настроек Visual Studio не совсем подходят; у меня нет dev-studio, работающей впередо мной, так что я делаю все это из памяти):

  1. Найдите сборку OpenSSL, которую вы будете использовать.В оставшейся части этого списка эта папка будет называться OpenSSLDir.
  2. Убедитесь, что SDK в OpenSSLDir соответствует вашей архитектуре сборки Visual Studio.Если вы используете x86 OpenSSL SDK build, ваш проект должен быть также и x86.Аналогично для x64.
  3. Внутри OpenSSLDir есть семейство подпапок: bin, lib, include и т. Д. Обратите внимание на папки include и lib, они нам понадобятся.
  4. В вашем проекте Visual Studioв настройках конфигурации C ++ (как конфигурации отладки, так и конфигурации выпуска) это параметр «Дополнительные включаемые каталоги». Полный (или относительный) путь к папке OpenSSLDir / include должен быть добавлен туда
  5. В одном и том же проекте,в настройках Link есть «Дополнительные каталоги библиотек», туда следует добавить папку OpenSSLDir / lib.
  6. В этом же проекте в настройках Link находятся «Дополнительные входы библиотек» (это тот, который я, вероятно, вырезалимя / местоположение наихудшее, но вы должны быть в состоянии найти его.) Здесь вы добавляете libeay32.lib к вашему набору файлов библиотеки (уже должен включать kernel32.lib, user32.lib и т. д. по наследству). Если выВы также используете API SSL_xxx, вам также нужно ssleay32.lib в этом списке.

Со всем этим на местенаше фактическое использование заголовков и содержащихся в них функций decls.Везде, где вы используете OpenSSL API, этот API должен быть связан с соответствующим заголовком.Поскольку OpenSSLDir / include находится в пути включения, вы на полпути. Все заголовки OpenSSL должны быть включены в следующем формате :

#include <openssl/evp.h>
#include <openssl/sha.h>
#include <openssl/aes.h>
... etc ...

Часто заголовки OpenSSL (читай: гарантированно произойдет) включают в себя другие заголовки в SDK,которые включены с точно той же номенклатуры.Поэтому очень важно, чтобы вы настроили его на работу для вас (и, следовательно, для них) таким же образом.Следуя предоставленным мною инструкциям, оно должно работать.

Я оставляю задачу обеспечить libeay32.dll и ssleay32.dll для вашей платформы сборки в правильном пути или текущем рабочем каталоге, когда дело доходит до работает ваша программа, для вас.Убедиться, что папка OpenSSLDir / bin находится в нашем пути (или параметры запуска для вашего отладчика Visual Studio), - это самый простой способ сделать это.

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