EVP_MD_CTX "error: storage size of ‘ctx’ isn’t known"
You are using OpenSSL 1.1.0 which made this structure (and many others) opaque - which means you cannot stack allocate it. Instead do this:
EVP_MD_CTX *md_ctx;
md_ctx = EVP_MD_CTX_new();
if (md_ctx == NULL)
...
...
EVP_MD_CTX_free(md_ctx);