解决ErrorC1083错误及bcrypt与MySQL(XAMPP)项目集成步骤指导
分步解决方案:解决C1083错误、接入bcrypt并连接MySQL
一、解决当前C1083头文件错误
你下载的crypthash-net是.NET平台专属库,和你的C项目完全不兼容,这是导致头文件找不到的核心原因。按以下步骤替换为C版bcrypt:
- 获取C版bcrypt实现:找包含
bcrypt.h头文件和对应bcrypt.cpp源文件的C版本实现(无需依赖.NET) - 调整项目文件:
- 将
bcrypt.h和bcrypt.cpp放到你的项目目录下(可新建include、src文件夹分类存放) - 修改
main.cpp的头文件引用:删除#include <CryptHash/CryptHash.h>,将#include <bcrypt.h>改为#include "bcrypt.h"(用双引号引用本地头文件) - 修复代码语法错误:将
Generate a random salt这行改为注释(添加//),否则会触发编译错误
- 将
二、将bcrypt接入项目(编译配置)
根据你使用的编译器配置:
Visual Studio环境
- 右键项目 → 属性 → 配置属性 → C/C++ → 常规 → 附加包含目录:添加
bcrypt.h所在文件夹路径 - 右键项目 → 添加 → 现有项:选择
bcrypt.cpp加入项目,确保编译时会包含该文件
GCC/MinGW环境
编译时将bcrypt.cpp一起编译,执行命令:
g++ main.cpp bcrypt.cpp -o your_program_name
三、连接XAMPP中的MySQL数据库
1. 准备MySQL Connector/C++
获取适配XAMPP MySQL版本的Connector/C++,解压后得到头文件(include目录)和库文件(lib目录)
2. 配置项目编译路径
- 头文件路径:将Connector的
include目录添加到编译器的附加包含目录(VS:C/C++常规→附加包含目录;GCC:编译时加-I/path/to/connector/include) - 库文件路径:将Connector的
lib目录添加到链接器的附加库目录(VS:链接器→常规→附加库目录;GCC:编译时加-L/path/to/connector/lib) - 链接库:VS中在链接器→输入→附加依赖项添加
mysqlcppconn.lib(Debug版用mysqlcppconn-static.lib);GCC编译时加-lmysqlcppconn
3. 编写数据库操作代码
在main.cpp中添加数据库交互逻辑(需先在XAMPP的phpMyAdmin中创建数据库和表):
首先创建MySQL表(phpMyAdmin中执行)
CREATE DATABASE user_auth; USE user_auth; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL );
C++代码示例
#include <mysql/jdbc.h> #include <iostream> #include <memory> // 数据库配置(根据你的XAMPP设置调整) const char* DB_HOST = "tcp://127.0.0.1:3306"; const char* DB_USER = "root"; const char* DB_PASS = ""; // XAMPP默认root无密码 const char* DB_NAME = "user_auth"; class SecureEncryptor { // 保留你原有的hash_password、verify_password、generate_salt方法 // ... // 添加存储密码到数据库的方法 static bool store_password_to_db(const std::string& username, const std::string& password) { try { sql::Driver* driver = get_driver_instance(); std::unique_ptr<sql::Connection> con(driver->connect(DB_HOST, DB_USER, DB_PASS)); con->setSchema(DB_NAME); std::unique_ptr<sql::PreparedStatement> pstmt( con->prepareStatement("INSERT INTO users (username, password) VALUES (?, ?)") ); pstmt->setString(1, username); pstmt->setString(2, hash_password(password)); pstmt->executeUpdate(); return true; } catch (sql::SQLException& e) { std::cerr << "数据库错误: " << e.what() << std::endl; return false; } } // 添加从数据库验证密码的方法 static bool verify_password_from_db(const std::string& username, const std::string& password) { try { sql::Driver* driver = get_driver_instance(); std::unique_ptr<sql::Connection> con(driver->connect(DB_HOST, DB_USER, DB_PASS)); con->setSchema(DB_NAME); std::unique_ptr<sql::PreparedStatement> pstmt( con->prepareStatement("SELECT password FROM users WHERE username = ?") ); pstmt->setString(1, username); std::unique_ptr<sql::ResultSet> res(pstmt->executeQuery()); if (res->next()) { std::string stored_pwd = res->getString("password"); return verify_password(password, stored_pwd); } return false; } catch (sql::SQLException& e) { std::cerr << "数据库错误: " << e.what() << std::endl; return false; } } };
4. 运行前检查
- 确保XAMPP的MySQL服务已启动
- 验证数据库配置的用户名、密码、端口与XAMPP设置一致
内容的提问来源于stack exchange,提问作者Avantika eng
相关产品推荐
相关产品推荐

