You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code中openssl/aes.h找不到及编译权限问题求助

问题分析与解决方案

1. 头文件openssl/aes.h找不到的问题

你当前编译命令指定的是VC版本的库路径,但如果使用的是MinGW GCC,VC编译的.lib库与MinGW格式不兼容,且路径识别可能存在转义问题,按以下步骤修复:

  • 确认安装的是MinGW兼容版OpenSSL(可通过MSYS2的pacman -S openssl安装,或从OpenSSL官网下载MinGW构建包),VC版本库无法被MinGW GCC链接。
  • 修改编译命令的路径为正斜杠(避免Windows反斜杠转义问题),并指向MinGW对应库目录:
    gcc test.c -o test -I"C:/Program Files/OpenSSL-Win64/include" -L"C:/Program Files/OpenSSL-Win64/lib/mingw64" -lssl -lcrypto
    
  • 检查C:\Program Files\OpenSSL-Win64\include\openssl目录下是否存在aes.h,若不存在则重新安装完整的OpenSSL包。
  • 同步VS Code的c_cpp_properties.json配置路径与编译路径,示例:
    {
        "configurations": [
            {
                "name": "Win32",
                "includePath": [
                    "${workspaceFolder}/**",
                    "C:/Program Files/OpenSSL-Win64/include"
                ],
                "compilerPath": "C:/mingw64/bin/gcc.exe",
                "intelliSenseMode": "windows-gcc-x64"
            }
        ],
        "version": 4
    }
    

2. OpenSSL API弃用警告

OpenSSL 3.0+废弃了AES_set_encrypt_key等旧版直接调用接口,可通过两种方式解决:

  • 改用推荐的EVP接口(符合最新规范):
    #include <openssl/evp.h>
    
    int aes_encrypt(const unsigned char *plaintext, int plaintext_len, const unsigned char *key,
                    const unsigned char *iv, unsigned char *ciphertext) {
        EVP_CIPHER_CTX *ctx;
        int len, ciphertext_len;
    
        if(!(ctx = EVP_CIPHER_CTX_new())) return -1;
        if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv)) return -1;
        if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len)) return -1;
        ciphertext_len = len;
        if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) return -1;
        ciphertext_len += len;
    
        EVP_CIPHER_CTX_free(ctx);
        return ciphertext_len;
    }
    
  • 兼容旧API:在代码开头添加宏定义,或编译时追加参数:
    代码中添加:
    #define OPENSSL_API_COMPAT 0x10100000L
    #include <openssl/aes.h>
    
    或编译命令追加:
    -DOPENSSL_API_COMPAT=0x10100000L
    

3. 输出文件权限拒绝错误

  • 若在C:\Program Files等系统目录编译,需以管理员权限运行终端。
  • 检查test.exe是否被其他进程占用(比如之前运行的程序未关闭),关闭占用进程后重新编译。
  • 切换到桌面等有写入权限的目录编译,避免系统权限限制。

内容的提问来源于stack exchange,提问作者Muhammad Faheem Sajjad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:52:25