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

VS Code中C++链接MySQL Connector失败问题求助

VS Code下C++连接MySQL的链接错误解决

问题描述

在VS Code中编写C++代码连接本地MySQL,已安装MySQL Connector,但编译时出现链接错误,管理员启动编辑器也无效,错误在输入数据库名称前就触发。

main.cpp代码

#include <stdlib.h>
#include <iostream>

#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/prepared_statement.h>
using namespace std;

//仅作演示,绝对不要在代码中保存密码!
const string server = "localhost:3307";
const string username = "";
const string password = "";

int main()
{
    sql::Driver *driver;
    sql::Connection *con;
    sql::Statement *stmt;
    sql::PreparedStatement *pstmt;

    try
    {
        driver = get_driver_instance();
        con = driver->connect(server, username, password);
    }
    catch (sql::SQLException e)
    {
        cout << "无法连接到服务器,错误信息: " << e.what() << endl;
        system("pause");
        exit(1);
    }

    return 0;
}

tasks.json配置

{
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: g++.exe etkin dosyayı derle",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "-IC:/Program Files/MySQL/MySQL Connector C++ 8.0/include/jdbc/",
                "-LC:/Program Files/MySQL/MySQL Connector C++ 8.0/lib -lmysqlcppconn",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Hata Ayıklayıcısı tarafından oluşturulan görev."
        }
    ],
    "version": "2.0.0"
}

错误信息

C:\msys64\mingw64\bin\g++.exe -fdiagnostics-color=always -g '-IC:/Program Files/MySQL/MySQL Connector C++ 8.0/include/jdbc/' '-LC:/Program Files/MySQL/MySQL Connector C++ 8.0/lib -lmysqlcppconn' c:\Users\yagizgil\Desktop\scripts\mrns\main.cpp -o c:\Users\yagizgil\Desktop\scripts\mrns\main.exe 

C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\yagizgil\AppData\Local\Temp\ccfxSMfR.o: in function `check_lib':
C:/Program Files/MySQL/MySQL Connector C++ 8.0/include/jdbc/cppconn/driver.h:82: undefined reference to `check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' 
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files/MySQL/MySQL Connector C++ 8.0/include/jdbc/cppconn/driver.h:83: undefined reference to `check(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)' 
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\yagizgil\AppData\Local\Temp\ccfxSMfR.o: in function `get_driver_instance_by_name':
C:/Program Files/MySQL/MySQL Connector C++ 8.0/include/jdbc/cppconn/driver.h:95: undefined reference to `_get_driver_instance_by_name' 
collect2.exe: error: ld returned 1 exit status

解决方法

1. 拆分链接参数

当前tasks.json中-LC:/Program Files/MySQL/MySQL Connector C++ 8.0/lib -lmysqlcppconn是作为单个参数传入的,gcc会把整个字符串当作路径解析,导致无法正确找到库文件。必须拆分成两个独立参数:

"-LC:/Program Files/MySQL/MySQL Connector C++ 8.0/lib",
"-lmysqlcppconn",

修改后的tasks.json args部分:

"args": [
    "-fdiagnostics-color=always",
    "-g",
    "-IC:/Program Files/MySQL/MySQL Connector C++ 8.0/include/jdbc/",
    "-LC:/Program Files/MySQL/MySQL Connector C++ 8.0/lib",
    "-lmysqlcppconn",
    "${file}",
    "-o",
    "${fileDirname}\\${fileBasenameNoExtension}.exe"
],

2. 检查库文件匹配性

  • 确认安装的MySQL Connector C++版本与MinGW编译器架构一致(32位/64位)
  • MinGW环境建议使用mysqlcppconn8库,将链接参数改为-lmysqlcppconn8
  • 确保libmysqlcppconn.dll(或libmysqlcppconn8.dll)所在路径加入系统PATH环境变量,或者将dll文件复制到生成的exe同目录下

3. 调整C++标准版本

添加-std=c++11或更高版本的编译选项,确保编译器支持std::__cxx11命名空间:

"-std=c++17",

将该选项加入到tasks.json的args列表中即可。


内容的提问来源于stack exchange,提问作者ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:01:28