Я пытаюсь собрать Crypto++ и ориентироваться на Windows XP. Читаю это, я внес эти изменения перед сборкой библиотеки:
Затем я скомпилировал некоторый код (с теми же изменениями, что и раньше для совместимости с XP):
#include <iostream>
#include <stdio.h>
#include <cryptopp/cryptlib.h>
#include <cryptopp/blake2.h>
int main() {
using namespace CryptoPP;
BLAKE2b hash;
std::string password = "hunter1";
hash.Update((const byte*)password.data(), password.size());
std::string digest;
digest.resize(hash.DigestSize());
hash.Final((byte*)&digest[0]);
printf("Message: %s\n", password.c_str());
puts("Digest:");
for (char ch : digest)
printf("%02hhX", ch);
putchar('\n');
}
Это отлично работает в Windows 10, но когда я копирую каталог Release
в Windows XP для тестирования, я получаю эту ошибку:
Итак, что я делаю не так, и как мне использовать эту библиотеку в Windows XP, если вообще можно?
InitializeCriticalSection
, как описано в ответе, который вы указали. Похоже, это означает, что библиотека, вероятно, не поддерживает XP. - person Ayxan Haqverdili   schedule 16.03.2021winbase.h
объявляетInitializeCriticalSectionEx
условным для#if (_WIN32_WINNT >= 0x0403)
, но задокументировано, что API существует только в Vista и более поздних версиях, то есть>= 0x600
. Хотя есть также#define CRITICAL_SECTION_NO_DEBUG_INFO RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO
, который предполагает какую-то переадресацию, хотя я не следил за ней полностью. - person dxiv   schedule 16.03.2021