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
相关产品推荐
相关产品推荐

