Использование Botan C ++ в QT для шифрования файлов - PullRequest
0 голосов
/ 05 июля 2018

Я использую Qt Creator 4.6.1 в Windows 10
На основании Qt 5.10.1 (MSVC 2015, 32 bit)
Построен на May 2 2018 04:24:33
qmake с mingw491_32

Существует проект из Интернета, в котором используется botanwrapper с включенным Botan.pri

Полный код довольно длинный, поэтому разместить его здесь невозможно, но он доступен по адресу http://www.voidrealms.com/index.php?r=source/view&id=1 в виде zip-файла.

Это все работает и шифрует файлы, но когда я добавляю файлы в свой проект, я получаю огромное количество ошибок компиляции, подобных приведенным ниже.

botan.h:9380: error: expected identifier before '(' token
          X942_DH_PARAMETERS = ANSI_X9_42,
          ^

и error: expected '}' before '(' token which points to the line

enum Format {
         ANSI_X9_42,
         ANSI_X9_57,
         PKCS_3,

         DSA_PARAMETERS = ANSI_X9_57,
         DH_PARAMETERS = ANSI_X9_42,
         X942_DH_PARAMETERS = ANSI_X9_42, // Error points to here
         PKCS3_DH_PARAMETERS = PKCS_3
      };

Также много ошибок, связанных с const, таких как

error: non-member function 'bool Botan::verify_group(Botan::RandomNumberGenerator&, bool)' cannot have cv-qualifier

bool verify_group(RandomNumberGenerator& rng, bool strong) const;  

Что указывает на код ниже


bool verify_group(RandomNumberGenerator& rng, bool strong) const;

Я проверил .pro-файлы для включений, и у меня есть те же настройки файлов, что и для проекта, который компилируется и выполняется с той же настройкой. У меня есть тот же botan.pri файл, который содержит

win32 {
    DEFINES += BOTAN_TARGET_OS_IS_WINDOWS \
        BOTAN_TARGET_OS_HAS_LOADLIBRARY BOTAN_TARGET_OS_HAS_WIN32_GET_SYSTEMTIME \
        BOTAN_TARGET_OS_HAS_WIN32_VIRTUAL_LOCK BOTAN_HAS_DYNAMICALLY_LOADED_ENGINE \
        BOTAN_HAS_DYNAMIC_LOADER BOTAN_HAS_ENTROPY_SRC_CAPI BOTAN_HAS_ENTROPY_SRC_WIN32 \
        BOTAN_HAS_MUTEX_WIN32

    win32-msvc* {
        QMAKE_CXXFLAGS += -wd4251 -wd4290 -wd4250
        DEFINES += BOTAN_BUILD_COMPILER_IS_MSVC BOTAN_TARGET_OS_HAS_GMTIME_S
    } else {
        QMAKE_CFLAGS += -fpermissive -finline-functions -Wno-long-long
        QMAKE_CXXFLAGS += -fpermissive -finline-functions -Wno-long-long
    }
    LIBS += -ladvapi32 -luser32
}

Я прочитал, что удаление const удалит 1 или более ошибок, но я не понимаю, почему это происходит на той же установке, которая успешно компилирует botan.h и запускает сборку и шифрует файлы. Может ли кто-нибудь помочь с тем, как начать устранять это. Помощь приветствуется. Заранее спасибо.

1 Ответ

0 голосов
/ 05 июля 2018

Проблема в том, что Windows API определяет макрос X942_DH_PARAMETERS, который конфликтует с этим перечислением. (Фактически, enum был переименован в более поздних выпусках Botan, чтобы избежать этой проблемы https://github.com/randombit/botan/issues/482).

Вы можете обойти это, используя #undef X942_DH_PARAMETERS перед включением заголовков Botan.

...