====== Risoluzione Problemi ======
Qui troverete soluzioni per i problemi comuni durante la compilazione di OpenSSL.
----
===== Errori di Compilazione =====
==== "stdlib.h not found" o "windows.h not found" ====
**Sintomo:**
fatal error C1083: Cannot open include file: 'stdlib.h': No such file or directory
**Causa:** Windows SDK non installato o non nel PATH.
**Soluzione:**
# Opzione 1: Installare Windows SDK
winget install Microsoft.WindowsSDK.10.0.22621
# Opzione 2: Nel Visual Studio Installer
# → "Individual Components" → selezionare "Windows 10 SDK"
Poi: Ricaricare l'ambiente Visual Studio:
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
----
==== "perl is not recognized" ====
**Sintomo:**
'perl' is not recognized as an internal or external command
**Causa:** Perl non installato o non nel PATH.
**Soluzione:**
# Installare Perl
winget install StrawberryPerl.StrawberryPerl
# Impostare PATH manualmente (se ancora non trovato dopo il riavvio)
set PATH=C:\Strawberry\perl\bin;%PATH%
----
==== "NASM not found" ====
**Sintomo:**
NASM not found - please read INSTALL.md
**Causa:** NASM non installato o non nel PATH.
**Soluzione A: Installare NASM (consigliato)**
winget install NASM.NASM
# Impostare PATH (il percorso può variare!)
set PATH=%LOCALAPPDATA%\bin\NASM;%PATH%
# Verificare
nasm -v
**Soluzione B: Compilare senza NASM (più lento)**
perl Configure VC-WIN64A no-asm --prefix=D:\Projects\openssl-3.6.0\bin
Senza NASM, AES e SHA sono significativamente più lenti!
----
==== "cl.exe not found" ====
**Sintomo:**
'cl' is not recognized as an internal or external command
**Causa:** Ambiente Visual Studio non caricato.
**Soluzione:**
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
**Suggerimento:** Avviate sempre "Developer Command Prompt for VS 2022" dal menu Start - l'ambiente è già caricato.
----
===== Problemi PowerShell =====
==== "cl.exe causa errore nonostante il successo" ====
**Sintomo:** Lo script PowerShell si interrompe anche se ''cl.exe'' funziona.
**Causa:** ''cl.exe'' scrive informazioni sulla versione su stderr, che viene interpretato come errore con ''$ErrorActionPreference = "Stop"''.
**Soluzione nello script:**
# Gestire correttamente l'output di cl.exe
try {
$clOutput = & cl 2>&1 | Out-String
Write-Host "cl.exe trovato"
} catch {
Write-Host "cl.exe trovato (stderr ignorato)"
}
----
===== Problemi di Runtime =====
==== "DLL not found" all'avvio del programma ====
**Sintomo:**
The program can't start because libcrypto-3-x64.dll is missing
**Soluzione:**
1. Copiare le DLL nella cartella dell'applicazione:
copy D:\Projects\openssl-3.6.0\bin\bin\libcrypto-3-x64.dll .\
copy D:\Projects\openssl-3.6.0\bin\bin\libssl-3-x64.dll .\
2. Oppure copiare automaticamente nel .csproj:
PreserveNewest
PreserveNewest
----
==== "ML-DSA/ML-KEM non disponibile" ====
**Sintomo:**
openssl list -signature-algorithms | findstr mldsa
# Nessun output
**Possibili cause:**
1. **Versione OpenSSL errata** - Richiede 3.6.0 o superiore
openssl version
# Deve essere: OpenSSL 3.6.0 o superiore
2. **Provider non caricato**
openssl list -providers
# Dovrebbe mostrare "default" ed eventualmente "oqsprovider"
----
===== Ulteriore Aiuto =====
Se il vostro problema non è elencato qui:
* [[https://github.com/openssl/openssl/blob/master/NOTES-WINDOWS.md|OpenSSL Windows Notes]]
* [[https://github.com/openssl/openssl/issues|OpenSSL GitHub Issues]]
* [[https://stackoverflow.com/questions/tagged/openssl|StackOverflow OpenSSL]]
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//