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

