Вопрос:
Недавно я написал настольное приложение для Linux (VirtualBox), в котором используется openSSL. Я просто использую библиотеки для шифрования и дешифрования файлов (без сети), и он отлично работает. Теперь я пытаюсь создать версию Windows и ее одну из самых неприятных вещей, которые я когда-либо делал.
Онлайн-сообщество не очень помогло (десятки предлагаемых решений, все совершенно разные, и никто из них не работает для меня).
Особенности:
- У меня 64-разрядная машина.
- Я использую Qt Creator в качестве моей IDE.
- Я загрузил и установил Win64 OpenSSL v1.0.1g из http://slproweb.com/products/Win32OpenSSL.html
Приложение компилируется и запускается, но когда я добираюсь до этой строки:
EVP_EncryptInit(&ctxE, EVP_aes_256_cbc(), constKey, constIv);
Он выходит из строя с ошибкой сегментации.
Это была кошмарная охота на гусей. Любая помощь будет оценена. Благодарю.
Ответ №1
Вы не отправляли никаких кодов, поэтому я могу только догадываться, но если ваша программа отлично работает на Linux и точно такие же segfaults кода в Windows, то вы должны посмотреть на эти наиболее распространенные проблемы:
- Ваше приложение должно ссылаться на ту же версию библиотек времени выполнения C, с которыми был связан ваш openssl, и/или вам нужно включить OpenSSL_Applink. Также есть раздел FAQ по этой теме: я скомпилировал программу под Windows и сработал: почему?
- 64-разрядные Windows и 64-разрядные Linux – это две разные платформы, и поэтому они требуют правильной обработки кода C/C++, т.е. Длина занимает 8 байтов в 64-разрядной Linux, но только 4 байта в 64-битных Windows, так что один плохой malloc без sizeof (long) может вызвать серьезную проблему и т.д.